Python 讓列表逆序排列的 3 種方式

2021-01-15 開發小凱

讓列表逆序排列是我們編程時常碰到的問題,比如現在有一些客戶的姓名是將拼音的首字母按 A - Z 排列的,而你現在想找一個姓張( Z )的客戶,你就有了將姓名逆序排列的需求了。而在 Python 中,將列表逆序有 3 種方式,下面將逐一討論。

當然,這裡說的 3 種方式指的是使用 Python 的內建模塊的方法,不使用第三方的方法,包括你自己可能會寫的循環等。

假設我們現在有這麼一個列表

[1, 2, 3, 4, 5]

我們最終想得到的是

[5, 4, 3, 2, 1]

怎麼辦?

第一種方式 list.reverse()

Python 的 list.reverse() 方法,會直接在原來的列表裡面將元素進行逆序排列,不需要創建新的副本用於存儲結果。

就像你看到的這樣,調用 list.reverse() 的返回值是 None ,它逆序的結果直接體現在原來的列表裡面。

這種方式,有好處也有壞處。好處是節省內存使用,因為我們不需要重新申請空間來保存最後的結果。壞處是,我們修改了原來的數據,如果我們後面要使用原數據的話不方便。(雖說再倒序一次就行,但畢竟使用了多餘的操作)。

從可讀性來說,我喜歡這種方式。這個方法從字面意思上就告訴了我們所做的操作,即使是 Python 新手不知道這個方法,也能大致清楚這個完成了什麼功能。

第二種方式 使用切片 [::-1]

Python 的列表有一個特性叫做切片,你可以將它看作是方括號( [ ] )使用的擴展。

簡單的說下切片的使用

mylist[start:end:step]

上面的操作表示取 mylist 的第 start 個(列表索引從 0 開始)到第 end 個元素(不包括第 end 個),其中每隔 step 個(默認 1 )取一個。

當然,start 、end 和 step 都是可選的。

mylist[:] 會返回 mylist 的副本

加上 step 的話也正常工作

而當 start 、end 和 step 為負時,表示從反方向遍歷,看下面的例子就理解了

所以 mylist[::-1] 就能達到逆序的目的

相比於第一種方式,這種方式會另外創建副本來保存列表的所有元素,所以需要更多的內存空間。並且,由於使用了切片的特性,導致在可讀性上也不如之前的方式。但是這種方式沒有改變原來的列表,在某些情況下算是一種優勢。

第三種方式 使用 reversed() 方法

reversed 方法會將列表逆序的結果存儲到迭代器裡面,這種方式不會改變原來的列表,也不會創建原來列表的完整副本,只會多出迭代器對象所佔的空間,相對來說也比較高效。(不明白迭代器原理的同學可以看下我之前的一篇文章 一步一步帶你理解 Python 迭代器)

如果要訪問所有的元素,循環就好,就像這樣

看了例子後,我們發現,這個的可讀性也好,畢竟 reversed 字面意思已經體現出來了。

但是,如果我們想要一個列表呢,也簡單

雖然這能達到目的,但是如果我們最終想要得到列表的話,這裡使用 reversed 方法就沒有意義了,因為這裡我們又創建了 mylist 的副本。針對這種情況,用第一種或第二種方式更合適。

那麼選擇哪一種呢

1、顯然,第一種是首選。畢竟高效、易讀。如果不要保留原列表的數據,使用這種方式顯然更有優勢,否則選擇後兩種。

2、如果最後需要得到列表類型的結果,那麼選第二種方式比較合理。否則,第三種方式更高效。

相關焦點

  • Python數據類型串講(中)
    python中的內建序列有6種:列表、元祖、字符串、Unicode字符串、xrange對象、buffer對象,其中列表和元祖是最常見的序列,應重點掌握。字符串在上一篇文章中已簡單介紹,下面將以字符串為例,對序列的通用操作進行詳講。
  • Python列表和元組
    l = [1, 2, 3, 4]l.append(5) # 添加元素 5 到原列表的末尾l[1, 2, 3, 4, 5]```Python 中的列表和元組都支持負數索引,列表和元組都支持切片操作>list = [1, 2, 3, 4]l[1:3] # 返回列表中索引從 1 到 2 的子列表[2, 3]tup = (1, 2, 3, 4)tup[1:3] # 返回元組中索引從 1 到 2 的子元組
  • python數據類型總結——列表
    多個元素的集合也是一種常見的表達方式。python用列表或元組來幫助我們。python列表一系列元素組成一個集合,可能通過索引,對每個元素進行訪問。這種數據類型統稱為序列。在python中,字符串就是一種序列。列表,也是序列的一種。可以用中括號來聲明列表。
  • Python數據類型之列表list
    # 列表是python中最基本的數據結構,它是一個有序序列,序列中的每個元素都分配一個數字(位置,索引)# 1、我們可以使用 方括號,中括號[]來創建列表# 2、我們可以直接將序列放在list(seq)
  • Python語言中使用array模塊實現動態數組的操作
    背景對於動態數組諸如創建、插入、刪除、查詢大小等操作,在C/C++語言中,可以使用標準庫中的vector類實現,而在python語言中,也同樣提供了內置的array模塊實現類似的功能。Python中的array類似於列表list,如都可以動態增刪元素,但又有所區別,list中存儲的元素類型可以不一樣,但array中元素類型必須完全一樣。另外,由於list中每個元素同時存儲了其地址即指針(用以標記每個元素的數據類型)和實際的數據,所以,在存儲及操作效率上,array又遠遠高於列表。下面通過例子講解array模塊的常用操作。
  • Python之list列表數據類型講解
    前言在python中,list列表數據類型其實就是一個容器,可以放置大量元素的集合。同時,list列表也有很多特點和使用場景,本文主要講解list列表的函數方法。python常用方法1、append添加元素append()函數是將要添加的元素追加到列表的末尾。
  • 11個python列表方法全面解析!
    來源:AI入門學習列表是python裡很重要的數據類型,其中的方法總共有11個,數量掌握這些方法,對數據的處理效率會大大提高,現在分享給大家。ls = [1,2,3,5,4,5,5,5,5,"python"]ls.count(5) #統計列表ls中 5 出現的次數5ls.count(0)#列表ls中無0元素ls.count("python")
  • python字符串、列表內的方法使用
    python類型int:bit_lenth()bool:True Falsestr: str --->bool :bool(str): ''--->Falsestr例如:s = 'alexsb's1 = s[1]s2 = s[1:3]s3 = s[0:] s[
  • 一日一技:從Python列表中刪除重複值
    從Python列表中刪除重複項列表是一個包含不同Python對象的容器,該對象可以是整數,字符串,布爾值等。它等同於其他程式語言中的數組。因此,在這裡我們將通過不同的方式來從列表中刪除重複值。在這節中,我們將學習:使用Set()方法 從列表中刪除重複項使用臨時列表從列表中刪除重複項。
  • python入門第四課:列表的排序、元素遍歷
    Sort()方法會永久改變列表的排列順序,還有個函數sorted()只臨時改變列表順序,大家也可以測試一下。有時候需要從列表最後一個元素倒著列印,可以用reverse()方法,會永久改變列表的順序。如果需要知道列表有多少個元素,可以用len()方法。
  • python入門第三課:列表元素的訪問、增加、刪除與修改
    2、列表是有順序的,上面列表中『蘋果』是第一個,序號用0表示,'香蕉'的序號是1,'橘子'的序號是2,'葡萄'的序號是3,1990的序號是4,以此類推。3、列表中的元素沒有任何關係,元素可以重複出現。)print('1990 + 1 =',fruits[4]+1)2、在列表中添加元素有多種方法可以添加元素,下面介紹兩種:第一種是在尾部添加元素,使用append()方法,見下面代碼,確實在尾部加入了新的元素
  • python sys模塊的常見用法匯總
    python的內置模塊sys,提供了系統相關的一些變量和函數,在實際開發中,常見的有以下幾種用法1., '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5
  • Python入門教程(二):Numpy數組基礎
    x1# array([5, 0, 3, 3, 7, 9])python中的索引從0開始計數,直到n-1,以下例子獲取了x1中的第1一個數值和第5個值。負值索引可以獲取末尾索引。多維數組在多維數組中,可以用逗號分隔的索引元組獲取元素。
  • Python2 已終結,入手Python 3,你需要這30個技巧
    例如,你可以用 Out[3] 來調取第三條命令的輸出。你可以用下面這條命令安裝 IPython:pip3 install ipython4. 列表表達式有了列表表達式,你就不再需要用 for loop 來生成一個 list 了。
  • Python 三十大實踐、建議和技巧
    1、使用 python 3由於官方從2020年1月1日起就停止了對python2.7的更新支持,因此本教程的大部分例子都只能在python 3環境下運行。如果你仍然在使用2.7版本,請先升級到python 3。2、檢查並使用滿足需求的最小python版本你可以在代碼中檢查Python 版本,以確保你的代碼使用者沒有使用不兼容的版本運行腳本。
  • python-docx設置表格對齊方式
    2種設置對齊方式,並在文章最後將文章主要內容製作了思維導圖。(cell.vertical_alignment)和單元格中的段落的對齊(paragraph.alignment)等2種對齊方式配合使用。在單元格垂直對齊和段落對齊的配合過程中可以組合成12種方式,分別是:靠上兩端對齊、靠上居中對齊、靠上右對齊、中部兩端對齊、中部居中對齊、中部右對齊、靠下兩端對齊、靠下居中對齊、靠下右對齊、靠上左對齊、中部左對齊、靠下左對齊。其中,在WORD軟體中內置了前9種對齊方式。
  • Python基礎學習之常用六大數據類型
    a = "hello python"也可以使用 「」" 創建多行字符串:a = """ hello python"""字符串可以通過下面方式進行截取或者連接:print (str[0:4]) 輸出第一個到倒數第四個的所有字符 print (str[0]) 輸出單字符 第1
  • Python和R之間轉換的基本指南:有效學習另一種語言的簡單方法
    但是不一定有一種簡單的方法可以把新的思維方式和你所說的語言聯繫起來,這意味著你不僅要記住一個單詞,而是要對每一個編程概念有一個新的理解。甚至你寫的第一行代碼,print(「你好,世界!「)要求您了解print函數的工作原理、編輯器如何返回print語句以及何時使用引號。當你學習第二種程式語言時,你可以將你所知道的語言中的概念翻譯成新的語言,從而更有效、更快地學習。
  • 16.快速掌握Python列表類:Python列表類函數歸納總結
    一種更巧妙的辦法是,用上一篇學過的知識,在列表 l1 頭尾補上一個0。這樣,在新列表中,只看第2個元素到倒數第2個元素,所有元素的判斷邏輯是一致的。 l2 = [0] + l1 + [0]滿足條件的位置種上樹苗後,會影響後面的位置。比如下面的列表,位置3先滿足條件,位置4就不再滿足條件了。
  • python隨機函數random分配應用,隨機分配8名老師到3個教室中
    羽憶教程最近遇到一個問題,要隨機分配8名老師到3個辦公室中,這時小編想要了python中的隨機函數random來進行分配工作,感覺小編像個月老一樣。而在這個項目中,我們需要使用到生成數字1到3範圍內的隨機數,即通過導入random模塊後,根據random.randint(1,3)隨機生成一個1到3的整數。下面開始實操。