最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中字符串和四大數(shù)據(jù)結(jié)構(gòu)的反轉(zhuǎn)操作指南

 更新時(shí)間:2026年04月02日 09:24:21   作者:卷心菜狗  
這篇文章主要為大家詳細(xì)介紹了Python中字符串和四大數(shù)據(jù)結(jié)構(gòu)(列表、元組、集合、字典)的反轉(zhuǎn)方法,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下

1. 字符串反轉(zhuǎn)

字符串是 Python 中最常用的序列類型,反轉(zhuǎn)操作非常高頻,以下是三種核心方法。

1.1 方法1:切片[::-1](最推薦!)

這是 Python 中最簡(jiǎn)潔高效的字符串反轉(zhuǎn)方式,利用切片的**步長(zhǎng)(step)**參數(shù)實(shí)現(xiàn)。

切片語(yǔ)法回顧: s[start:end:step]

  • start:起始索引(省略則從開(kāi)頭)
  • end:結(jié)束索引(省略則到末尾)
  • step:步長(zhǎng),-1 表示從后往前取

代碼示例:

s = "Hello Python"

# 切片反轉(zhuǎn):start和end省略,step=-1
reversed_s = s[::-1]

print(f"原字符串: {s}")
print(f"反轉(zhuǎn)后: {reversed_s}")
# 輸出:
# 原字符串: Hello Python
# 反轉(zhuǎn)后: nohtyP olleH

解析:

  • 切片 [::-1] 會(huì)從字符串最后一個(gè)字符開(kāi)始,向前遍歷所有字符,生成新的反轉(zhuǎn)字符串。
  • 優(yōu)點(diǎn):代碼一行搞定,時(shí)間復(fù)雜度 O(n),效率極高。

1.2 方法2:reversed()+join()

reversed() 是 Python 內(nèi)置函數(shù),返回一個(gè)反向迭代器,需要用 join() 將迭代器拼接成字符串。

代碼示例:

s = "Hello Python"

# 1. reversed(s) 返回反向迭代器
# 2. ''.join() 將迭代器中的字符拼接成字符串
reversed_s = ''.join(reversed(s))

print(f"原字符串: {s}")
print(f"反轉(zhuǎn)后: {reversed_s}")
# 輸出: nohtyP olleH

解析:

  • reversed(s) 不會(huì)直接生成列表,而是返回迭代器(節(jié)省內(nèi)存),適合處理超長(zhǎng)字符串。
  • join() 用于將可迭代對(duì)象(如迭代器、列表)的元素拼接成字符串。

1.3 方法3:手動(dòng)循環(huán)拼接(理解原理用)

通過(guò)索引從后往前遍歷字符,逐個(gè)拼接成新字符串,適合理解反轉(zhuǎn)邏輯。

代碼示例:

s = "Hello Python"
reversed_s = ""

# 從最后一個(gè)索引(len(s)-1)開(kāi)始,遍歷到 0
for i in range(len(s)-1, -1, -1):
    reversed_s += s[i]

print(f"原字符串: {s}")
print(f"反轉(zhuǎn)后: {reversed_s}")
# 輸出: nohtyP olleH

解析:

  • range(len(s)-1, -1, -1):起始是最后一個(gè)索引,結(jié)束是 -1(不包含,所以到 0),步長(zhǎng) -1。
  • 優(yōu)點(diǎn):直觀理解反轉(zhuǎn)過(guò)程;缺點(diǎn):代碼冗長(zhǎng),效率略低(字符串拼接會(huì)生成新對(duì)象)。

字符串反轉(zhuǎn)總結(jié): 日常開(kāi)發(fā)優(yōu)先用切片 [::-1],簡(jiǎn)潔高效。

2. 四大數(shù)據(jù)結(jié)構(gòu)反轉(zhuǎn)

2.1 列表反轉(zhuǎn)

列表是可變序列,反轉(zhuǎn)方法分為原地反轉(zhuǎn)(修改原列表)和非原地反轉(zhuǎn)(返回新列表)。

方法1:切片[::-1](非原地,返回新列表)

和字符串切片類似,返回一個(gè)新的反轉(zhuǎn)列表,不修改原列表。

代碼示例:

lst = [1, 2, 3, 4, 5]

# 切片反轉(zhuǎn),返回新列表
reversed_lst = lst[::-1]

print(f"原列表: {lst}")          # 原列表不變: [1, 2, 3, 4, 5]
print(f"反轉(zhuǎn)后新列表: {reversed_lst}") # [5, 4, 3, 2, 1]

解析:

優(yōu)點(diǎn):不修改原列表,代碼簡(jiǎn)潔;缺點(diǎn):生成新列表,占用額外內(nèi)存。

方法2:list.reverse()(原地反轉(zhuǎn),修改原列表)

列表的內(nèi)置方法,直接修改原列表,返回 None(新手易錯(cuò)?。?/p>

代碼示例:

lst = [1, 2, 3, 4, 5]

# 原地反轉(zhuǎn),修改原列表,返回 None
result = lst.reverse()

print(f"原列表(已修改): {lst}") # [5, 4, 3, 2, 1]
print(f"返回值: {result}")        # None(注意!不是反轉(zhuǎn)后的列表)

解析:

優(yōu)點(diǎn):不需要額外內(nèi)存,直接修改原列表;缺點(diǎn):會(huì)改變?cè)斜?,且返回值?None,不能寫 a = lst.reverse()。

方法3:reversed()+list()(非原地,返回迭代器轉(zhuǎn)列表)

reversed() 返回反向迭代器,用 list() 轉(zhuǎn)成新列表,不修改原列表

代碼示例:

lst = [1, 2, 3, 4, 5]

# reversed() 返回迭代器,list() 轉(zhuǎn)成新列表
reversed_lst = list(reversed(lst))

print(f"原列表: {lst}")          # [1, 2, 3, 4, 5]
print(f"反轉(zhuǎn)后新列表: {reversed_lst}") # [5, 4, 3, 2, 1]

解析:

適合需要迭代器的場(chǎng)景(如遍歷大列表時(shí)節(jié)省內(nèi)存),轉(zhuǎn)列表后和切片效果一致。

列表反轉(zhuǎn)總結(jié):

  • 不想修改原列表:用 lst[::-1]list(reversed(lst))
  • 想直接修改原列表:用 lst.reverse()(注意返回值是 None)。

2.2 元組反轉(zhuǎn)

元組是不可變序列,沒(méi)有 reverse() 方法(不能原地修改),只能通過(guò)非原地方式返回新元組。

方法1:切片[::-1](推薦)

和字符串、列表切片一致,返回新的反轉(zhuǎn)元組。

代碼示例:

t = (1, 2, 3, 4, 5)

# 切片反轉(zhuǎn),返回新元組
reversed_t = t[::-1]

print(f"原元組: {t}")          # (1, 2, 3, 4, 5)
print(f"反轉(zhuǎn)后新元組: {reversed_t}") # (5, 4, 3, 2, 1)

方法2:reversed()+tuple()

reversed() 返回迭代器,用 tuple() 轉(zhuǎn)成新元組。

代碼示例:

t = (1, 2, 3, 4, 5)
reversed_t = tuple(reversed(t))
print(f"反轉(zhuǎn)后: {reversed_t}") # (5, 4, 3, 2, 1)

元組反轉(zhuǎn)總結(jié): 優(yōu)先用切片 [::-1],簡(jiǎn)潔高效。

2.3 集合反轉(zhuǎn)(說(shuō)明)

重要:集合(Set)是無(wú)序的! 集合中的元素沒(méi)有固定順序,因此“集合反轉(zhuǎn)”本身沒(méi)有意義。

如果強(qiáng)行將集合轉(zhuǎn)成列表反轉(zhuǎn),再轉(zhuǎn)回集合,最終集合的順序仍然是不確定的(Python 內(nèi)部?jī)?yōu)化決定)。

代碼示例(僅演示,無(wú)實(shí)際意義):

s = {1, 2, 3, 4, 5}

# 1. 集合轉(zhuǎn)列表
lst = list(s)
# 2. 列表反轉(zhuǎn)
reversed_lst = lst[::-1]
# 3. 轉(zhuǎn)回集合(順序又變了?。?
s_new = set(reversed_lst)

print(f"原集合: {s}")          # 例如 {1,2,3,4,5}(順序不確定)
print(f"反轉(zhuǎn)列表后轉(zhuǎn)回集合: {s_new}") # 順序仍然不確定

結(jié)論:集合不需要反轉(zhuǎn)操作,如果需要有序的“集合”,可以用 listcollections.OrderedDict(Python 3.7+ 字典已有序)。

2.4 字典反轉(zhuǎn)

Python 3.7+ 中,字典(Dictionary)是有序的(按插入順序存儲(chǔ)鍵值對(duì))。字典反轉(zhuǎn)分為兩種場(chǎng)景:

  1. 鍵值對(duì)反轉(zhuǎn):將 {k: v} 變成 {v: k}
  2. 按插入順序反轉(zhuǎn)項(xiàng):將鍵值對(duì)的順序倒過(guò)來(lái)。

鍵值對(duì)反轉(zhuǎn)(k:v→v:k)

通過(guò)字典推導(dǎo)式實(shí)現(xiàn),注意:值必須唯一,否則后面的會(huì)覆蓋前面的!

代碼示例:

# 原字典:鍵唯一,值也唯一
original_dict = {"a": 1, "b": 2, "c": 3}

# 字典推導(dǎo)式:鍵值互換
reversed_dict = {v: k for k, v in original_dict.items()}

print(f"原字典: {original_dict}")    # {'a': 1, 'b': 2, 'c': 3}
print(f"鍵值反轉(zhuǎn)后: {reversed_dict}") # {1: 'a', 2: 'b', 3: 'c'}

解析:

  • original_dict.items() 獲取鍵值對(duì) (k, v)。
  • 推導(dǎo)式中寫成 {v: k},實(shí)現(xiàn)鍵值互換。

易錯(cuò)點(diǎn):值不唯一時(shí)會(huì)覆蓋!

# 原字典:值有重復(fù)('a' 和 'b' 對(duì)應(yīng)的值都是 1)
original_dict = {"a": 1, "b": 1, "c": 3}

# 鍵值反轉(zhuǎn)后,后面的 'b':1 會(huì)覆蓋前面的 'a':1
reversed_dict = {v: k for k, v in original_dict.items()}

print(f"原字典: {original_dict}")    # {'a': 1, 'b': 1, 'c': 3}
print(f"鍵值反轉(zhuǎn)后: {reversed_dict}") # {1: 'b', 3: 'c'}('a' 被覆蓋了?。?/pre>

按插入順序反轉(zhuǎn)項(xiàng)(Python 3.7+)

將字典的鍵值對(duì)按插入順序倒過(guò)來(lái),保持鍵值關(guān)系不變,只改變順序。

代碼示例:

# 原字典(按插入順序:a→b→c)
original_dict = {"a": 1, "b": 2, "c": 3}

# 1. items() 轉(zhuǎn)成列表,列表可以反轉(zhuǎn)
items_list = list(original_dict.items())  # [('a',1), ('b',2), ('c',3)]
# 2. 反轉(zhuǎn)列表
reversed_items = items_list[::-1]         # [('c',3), ('b',2), ('a',1)]
# 3. 轉(zhuǎn)回字典
reversed_dict = dict(reversed_items)

print(f"原字典: {original_dict}")    # {'a': 1, 'b': 2, 'c': 3}
print(f"順序反轉(zhuǎn)后: {reversed_dict}") # {'c': 3, 'b': 2, 'a': 1}

# 一行代碼搞定
reversed_dict_one_line = dict(list(original_dict.items())[::-1])
print(f"一行代碼: {reversed_dict_one_line}") # 同上

解析:

  • 字典的 items() 本身是視圖對(duì)象,轉(zhuǎn)成列表后才能反轉(zhuǎn)。
  • 反轉(zhuǎn)列表后用 dict() 轉(zhuǎn)回,保持鍵值關(guān)系,順序倒過(guò)來(lái)。

字典反轉(zhuǎn)總結(jié):

  • 鍵值互換:用字典推導(dǎo)式 {v: k for k, v in d.items()}(注意值唯一)。
  • 順序反轉(zhuǎn):轉(zhuǎn)列表反轉(zhuǎn)后再轉(zhuǎn)回字典 dict(list(d.items())[::-1])。

3. 文件內(nèi)容反轉(zhuǎn)并復(fù)制

將一個(gè)文件的內(nèi)容反轉(zhuǎn)后寫入另一個(gè)文件,分為三種常見(jiàn)場(chǎng)景:

  • 整個(gè)文件內(nèi)容作為字符串反轉(zhuǎn)。
  • 行順序反轉(zhuǎn)(第一行變最后一行,行內(nèi)容不變)。
  • 每行內(nèi)容反轉(zhuǎn)(行順序不變,每行內(nèi)部字符反轉(zhuǎn))。

前置準(zhǔn)備: 先創(chuàng)建一個(gè)測(cè)試文件 original.txt,內(nèi)容如下:

第一行內(nèi)容
第二行內(nèi)容
第三行內(nèi)容

3.1 場(chǎng)景1:整個(gè)文件內(nèi)容反轉(zhuǎn)

將文件所有內(nèi)容作為一個(gè)大字符串,反轉(zhuǎn)后寫入新文件(適合小文件)。

代碼示例:

# 1. 讀取原文件全部?jī)?nèi)容
with open("original.txt", mode='r', encoding='utf-8') as f:
    content = f.read()

# 2. 反轉(zhuǎn)整個(gè)字符串
reversed_content = content[::-1]

# 3. 寫入新文件
with open("reversed_whole.txt", mode='w', encoding='utf-8') as f:
    f.write(reversed_content)

print("整個(gè)內(nèi)容反轉(zhuǎn)完成!")

結(jié)果 reversed_whole.txt

容內(nèi)行三第
容內(nèi)行二第
容內(nèi)行一第

3.2 場(chǎng)景2:行順序反轉(zhuǎn)(推薦!)

保持每行內(nèi)容不變,將行的順序倒過(guò)來(lái)(第一行變最后一行),這是最常用的文件反轉(zhuǎn)場(chǎng)景。

代碼示例:

# 1. 讀取所有行到列表(每個(gè)元素是一行,包含換行符)
with open("original.txt", mode='r', encoding='utf-8') as f:
    lines = f.readlines()

# 查看 lines 內(nèi)容:
# ['第一行內(nèi)容\n', '第二行內(nèi)容\n', '第三行內(nèi)容']

# 2. 反轉(zhuǎn)行列表
reversed_lines = lines[::-1]

# 3. 寫入新文件
with open("reversed_lines.txt", mode='w', encoding='utf-8') as f:
    f.writelines(reversed_lines)

print("行順序反轉(zhuǎn)完成!")

結(jié)果 reversed_lines.txt

第三行內(nèi)容
第二行內(nèi)容
第一行內(nèi)容

解析:

readlines() 讀取的行包含換行符 \n,反轉(zhuǎn)后直接 writelines() 寫入即可,換行符會(huì)保留。

3.3 場(chǎng)景3:每行內(nèi)容反轉(zhuǎn)

保持行順序不變,將每行內(nèi)部的字符反轉(zhuǎn)。

代碼示例:

# 1. 讀取所有行
with open("original.txt", mode='r', encoding='utf-8') as f:
    lines = f.readlines()

# 2. 處理每一行:反轉(zhuǎn)內(nèi)容,保留換行符
processed_lines = []
for line in lines:
    # 先去除換行符,反轉(zhuǎn),再加上換行符(如果原行有)
    if line.endswith('\n'):
        reversed_line = line.rstrip('\n')[::-1] + '\n'
    else:
        reversed_line = line[::-1]
    processed_lines.append(reversed_line)

# 3. 寫入新文件
with open("reversed_each_line.txt", mode='w', encoding='utf-8') as f:
    f.writelines(processed_lines)

print("每行內(nèi)容反轉(zhuǎn)完成!")

結(jié)果 reversed_each_line.txt

容內(nèi)行一第
容內(nèi)行二第
容內(nèi)行三第

3.4 大文件處理注意事項(xiàng)

如果文件非常大(比如幾個(gè) GB),read()readlines() 會(huì)一次性加載到內(nèi)存,導(dǎo)致內(nèi)存溢出。此時(shí)可以:

  • 行順序反轉(zhuǎn):用 collections.deque 雙端隊(duì)列從后往前讀(較復(fù)雜),或先讀取所有行到列表(如果內(nèi)存夠)。
  • 逐行處理:如果是每行內(nèi)容反轉(zhuǎn),可以逐行讀取、反轉(zhuǎn)、寫入臨時(shí)文件,最后重命名(避免內(nèi)存溢出)。

大文件逐行處理示例(每行內(nèi)容反轉(zhuǎn)):

# 大文件逐行處理,避免內(nèi)存溢出
with open("big_file.txt", mode='r', encoding='utf-8') as f_in, \
     open("big_file_reversed.txt", mode='w', encoding='utf-8') as f_out:
    
    for line in f_in:  # 逐行迭代,不一次性加載
        # 反轉(zhuǎn)每行
        if line.endswith('\n'):
            reversed_line = line.rstrip('\n')[::-1] + '\n'
        else:
            reversed_line = line[::-1]
        f_out.write(reversed_line)

print("大文件逐行反轉(zhuǎn)完成!")

總結(jié)

  1. 字符串反轉(zhuǎn):優(yōu)先用切片 s[::-1]。
  2. 列表反轉(zhuǎn):非原地用 lst[::-1],原地用 lst.reverse()(注意返回 None)。
  3. 元組反轉(zhuǎn):用 t[::-1]。
  4. 集合反轉(zhuǎn):無(wú)意義(無(wú)序)。
  5. 字典反轉(zhuǎn):鍵值互換用推導(dǎo)式,順序反轉(zhuǎn)轉(zhuǎn)列表后反轉(zhuǎn)。
  6. 文件反轉(zhuǎn):小文件用 readlines() 反轉(zhuǎn)行,大文件逐行處理。

到此這篇關(guān)于Python中字符串和四大數(shù)據(jù)結(jié)構(gòu)的反轉(zhuǎn)操作指南的文章就介紹到這了,更多相關(guān)Python反轉(zhuǎn)操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3多線程中使用線程睡眠的方法實(shí)現(xiàn)

    python3多線程中使用線程睡眠的方法實(shí)現(xiàn)

    線程睡眠是一個(gè)常見(jiàn)且有用的工具,用于控制線程的執(zhí)行順序和速度,本文主要介紹了python3多線程中使用線程睡眠的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • python創(chuàng)建和刪除目錄的方法

    python創(chuàng)建和刪除目錄的方法

    這篇文章主要介紹了python創(chuàng)建和刪除目錄的方法,涉及Python操作目錄的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 教你學(xué)會(huì)使用Python正則表達(dá)式

    教你學(xué)會(huì)使用Python正則表達(dá)式

    正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配。 Python 自1.5版本起增加了re 模塊,它提供 Perl 風(fēng)格的正則表達(dá)式模式。re 模塊使 Python 語(yǔ)言擁有全部的正則表達(dá)式功能。
    2017-09-09
  • 定位python內(nèi)存泄漏問(wèn)題及解決

    定位python內(nèi)存泄漏問(wèn)題及解決

    這篇文章主要介紹了定位python內(nèi)存泄漏問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 淺談Pandas中map, applymap and apply的區(qū)別

    淺談Pandas中map, applymap and apply的區(qū)別

    下面小編就為大家分享一篇淺談Pandas中map, applymap and apply的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python typing模塊--類型提示支持

    python typing模塊--類型提示支持

    這篇文章主要介紹python typing模塊類型提示支持, typing 模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查,下面進(jìn)入文章一起了解詳細(xì)內(nèi)容吧
    2021-10-10
  • 如何將你的應(yīng)用遷移到Python3的三個(gè)步驟

    如何將你的應(yīng)用遷移到Python3的三個(gè)步驟

    這篇文章主要介紹了如何將你的應(yīng)用遷移到Python3的三個(gè)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解如何通過(guò)Python實(shí)現(xiàn)批量數(shù)據(jù)提取

    詳解如何通過(guò)Python實(shí)現(xiàn)批量數(shù)據(jù)提取

    每天面對(duì)成堆的發(fā)票,無(wú)論是發(fā)票還是承兌單據(jù),抑或是其他各類公司數(shù)據(jù)要從照片、PDF等不同格式的內(nèi)容中提取,我們都有必要進(jìn)行快速辦公的能力提升。本文就教你如何利用Python實(shí)現(xiàn)批量數(shù)據(jù)提取吧
    2023-03-03
  • pytorch加載自定義網(wǎng)絡(luò)權(quán)重的實(shí)現(xiàn)

    pytorch加載自定義網(wǎng)絡(luò)權(quán)重的實(shí)現(xiàn)

    今天小編就為大家分享一篇pytorch加載自定義網(wǎng)絡(luò)權(quán)重的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python實(shí)現(xiàn)讀取excel寫入mysql的小工具詳解

    python實(shí)現(xiàn)讀取excel寫入mysql的小工具詳解

    EXCEL 和 MySQL 大體上來(lái)說(shuō)都可以算是"數(shù)據(jù)庫(kù)",MySQL貌似有EXCEL的接口,但是最近在自學(xué)Python,用Python實(shí)現(xiàn)了一下,下面這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)讀取excel寫入mysql的一個(gè)小工具,需要的朋友可以參考下。
    2017-11-11

最新評(píng)論

青海省| 永兴县| 临漳县| 汽车| 怀仁县| 宽甸| 精河县| 瓮安县| 桃源县| 双鸭山市| 东丰县| 陆丰市| 青川县| 垦利县| 连城县| 金川县| 永清县| 新邵县| 观塘区| 磐石市| 东丽区| 固镇县| 施秉县| 双江| 渝北区| 绵竹市| 弥勒县| 库车县| 夏河县| 台安县| 乌海市| 长海县| 牟定县| 滕州市| 通渭县| 色达县| 南召县| 通州市| 大城县| 曲沃县| 黎川县|