python對list排序
⑴ 如何對list進行python
對List進行排序,Python提供了兩個方法
---sort----
方法1.用List的內建函數list.sort進行排序
list.sort(func=None, key=None, reverse=False)
方法2.用序列類型函數sorted(list)進行排序(從2.4開始)
Python代碼
>>> list = [2,5,1]
>>> list
[2, 5, 1]
>>> sorted(list)
[1, 2, 5]
>>> list
[2, 5, 1]
>>> list.sort()
>>> list
[1, 2, 5]
sorted(list)返回一個對象,可以用作表達式。原來的list不變,生成一個新的排好序的list對象。
list.sort() 不會返回對象,改變原有的list。
---reverse---
這兩種方法使用起來差不多,以第一種為例進行講解:
從Python2.4開始,sort方法有了三個可選的參數,Python Library Reference里是這樣描述的
cmp:cmp specifies a custom comparison function of two arguments
(iterable elements) which should return a negative, zero or positive
number depending on whether the first argument is considered smaller
than, equal to, or larger than the second argument:
"cmp=lambda x,y: cmp(x.lower(), y.lower())"
key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower"
reverse:reverse is a boolean value. If set to True, then the list
elements are sorted as if each comparison were reversed.In general, the
key and reverse conversion processes are much faster than specifying an
equivalent cmp function. This is because cmp is called multiple times
for each list element while key and reverse touch each element only
once.
以下是sort的具體實例。
實例1:
>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]
實例2:
>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]
實例3:對第二個關鍵字排序
>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(lambda x,y:cmp(x[1],y[1]))
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
實例4:
對第二個關鍵字排序
>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1])
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
實例5:
對第二個關鍵字排序
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例6:(DSU方法:Decorate-Sort-Undercorate)
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
以上給出了6中對List排序的方法,其中實例3.4.5.6能起到對以List item中的某一項
為比較關鍵字進行排序.
效率比較:
cmp < DSU < key
通過實驗比較,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相當
多關鍵字比較排序:
實例7:
>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
我們看到,此時排序過的L是僅僅按照第二個關鍵字來排的,
如果我們想用第二個關鍵字排過序後再用第一個關鍵字進行排序呢?有兩種方法
實例8:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
實例9:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
為什麼實例8能夠工作呢?原因在於tuple是的比較從左到右比較的,比較完第一個,如果
相等,比較第二個
⑵ python中怎麼、樣對list元素排序
list中的元素可以是各種類型,list有一個方法list.sort(),假如是同一種類型用sort沒有問題,假如類型不同,書上說了,不是同一類型排序有什麼意義。
⑶ python中的list元組如何按照第二維元素排序
在Python中可以使用sorted函數對list進行排序,但是如果排序的對象是一個包含tuple的list時,sorted函數會使用tuple的第一個元素。
如果想要使用tuple的第二個元素進行排序,可以向sorted函數傳入一個key參數,key參數必須是一個函數,輸入是list的一個元素,輸出最好是一個數字或簡單的字元。
構造這樣一個函數可以使用匿名函數lambda,示例代碼如下:
myList=[('ngeon',7),('winterfell',4),('bran',9),('meelo',6)]
printsorted(myList,key=lambdax:x[1])
#[('winterfell',4),('meelo',6),('ngeon',7),('bran',9)]
⑷ python對列表裡的元素進行排序
l=['e','d','c','b','a']
l.sort()
print(l)
e=list(enumerate(l))
print(e)
⑸ python list排序問題
可以用
list.sort(key = int)
key的最用相當於構建值,列表中的每個值實際上會轉變為key(value),上例則為 int(value)
也就是 ['1','2','11','22'].sort(key = int)相當於[int('1'),int('2'),int('11'),int('22')].sort()
key可以理解為用於list comprehension的函數 ['1','2','11','22'].sort(key = int) 相當於
[int(x) for x in ['1','2','11','22'] ].sort()
⑹ Python學習小技巧之列表項的排序
Python學習小技巧之列表項的排序
本文介紹的是關於Python列表項排序的相關內容,分享出來供大家參考學習,下面來看看詳細的介紹:
典型代碼1:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list.sort()
print(data_list)
輸出1:
[-100, 0, 1, 3, 6, 9, 10, 100]
典型代碼2:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list_ = sorted(data_list)
print(data_list)
print(data_list_)
輸出2:
[6, 9, 1, 3, 0, 10, 100, -100]
[-100, 0, 1, 3, 6, 9, 10, 100]
應用場景
需要對列表中的項進行排序時使用。其中典型代碼1是使用的列表自身的一個排序方法sort,這個方法自動按照升序排序,並且是原地排序,被排序的列表本身會被修改;典型代碼2是調用的內置函數sort,會產生一個新的經過排序後的列表對象,原列表不受影響。這兩種方式接受的參數幾乎是一樣的,他們都接受一個key參數,這個參數用來指定用對象的哪一部分為排序的依據:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1]) # 我們想要基於列表項的第二個數進行排序
print(data_list)
>>> [(77, 34), (55, 97), (0, 100)]
另外一個經常使用的參數是reverse,用來指定是否按照倒序排序,默認為False:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1], reverse=True) # 我們想要基於列表項的第二個數進行排序,並倒序
print(data_list)
>>> [(0, 100), (55, 97), (77, 34)]
帶來的好處
1. 內置的排序方法,執行效率高,表達能力強,使代碼更加緊湊,已讀
2. 靈活的參數,用於指定排序的基準,比在類似於Java的語言中需要寫一個comparator要方便很多
其它說明
1. sorted內置函數比列表的sort方法要適用范圍更廣泛,它可以對除列表之外的可迭代數據結構進行排序;
2. list內置的sort方法,屬於原地排序,理論上能夠節省內存的消耗;
總結
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助
⑺ Python list排序求助
可以用
list.sort(key
=
int)
key的最用相當於構建值,列表中的每個值實際上會轉變為key(value),上例則為
int(value)
也就是
['1','2','11','22'].sort(key
=
int)相當於[int('1'),int('2'),int('11'),int('22')].sort()
key可以理解為用於list
comprehension的函數
['1','2','11','22'].sort(key
=
int)
相當於
[int(x)
for
x
in
['1','2','11','22']
].sort()
⑻ python 怎麼給list 排序
>>>a=[99,1,-90,6]
>>>a.sort()#正常的正序
>>>a
[-90,1,6,99]
>>>a.sort(reverse=True)#指定reverse=True倒序
>>>a
[99,6,1,-90]
>>>a.sort(key=lambdax:abs(x))#指定key=lambdax:abs(x)按照絕對值排序
>>>a
[1,6,-90,99]
⑼ 如何對列表進行排序 python
很多時候,我們需要對List進行排序,Python提供了兩個方法,對給定的List L進行排序:
方法1.用List的成員函數sort進行排序
方法2.用built-in函數sorted進行排序(從2.4開始)
這兩種方法使用起來差不多,以第一種為例進行講解:
從Python2.4開始,sort方法有了三個可選的參數,Python Library Reference里是這樣描述的
復制代碼代碼如下:
cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument:
"cmp=lambda x,y: cmp(x.lower(), y.lower())"
key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower"
reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an
equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.
以下是sort的具體實例。
實例1:
復制代碼代碼如下:
>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]
實例2:
復制代碼代碼如下:
>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]
實例3:
復制代碼代碼如下:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例4:
復制代碼代碼如下:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1])
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例5:
復制代碼代碼如下:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例6:(DSU方法:Decorate-Sort-Undercorate)
復制代碼代碼如下:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
以上給出了6中對List排序的方法,其中實例3.4.5.6能起到對以List item中的某一項
為比較關鍵字進行排序.
效率比較:
復制代碼代碼如下:
cmp < DSU < key
通過實驗比較,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相當
多關鍵字比較排序:
實例7:
復制代碼代碼如下:
>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
我們看到,此時排序過的L是僅僅按照第二個關鍵字來排的,如果我們想用第二個關鍵字
排過序後再用第一個關鍵字進行排序呢?有兩種方法
實例8:
復制代碼代碼如下:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
實例9:
復制代碼代碼如下:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
為什麼實例8能夠工作呢?原因在於tuple是的比較從左到右之一比較的,比較完第一個,如果
相等,比較第二個