python列表sort
Ⅰ python sort()用法
Python中的sort()方法用於數組排序,本文以實例形式對此加以詳細說明:
一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]
如果需要一個排序好的副本,同時保持原有列表不變,怎麼實現呢
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。
另一種獲取已排序的列表副本的方法是使用sorted函數:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
sorted返回一個有序的副本,並且類型總是列表,如下:
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定義比較函數
可以定義自己的比較函數,然後通過參數傳遞給sort方法:
def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 調用內建函數cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
三、可選參數
sort方法還有兩個可選參數:key和reverse
1、key在使用時必須提供一個排序過程總調用的函數:
x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print x # ['m', 'mm', 'mm', 'mmm']
2、reverse實現降序排序,需要提供一個布爾值:
y = [3, 2, 8 ,0 , 1]
y.sort(reverse = True)
print y #[8, 3, 2, 1, 0]
以上是雲棲社區小編為您精心准備的的內容,在雲棲社區的博客、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜索按鈕進行搜索python , 方法 sort python sort方法、python魔術方法詳解、python實例方法詳解、list.sort 使用方法、c list.sort 使用方法,以便於您獲取更多的相關知識。
Ⅱ python怎麼使用sort
一、基本形式
sorted(iterable[, cmp[, key[, reverse]]])
iterable.sort(cmp[, key[, reverse]])
參數解釋:
(1)iterable指定要排序的list或者iterable,不用多說;
(2)cmp為函數,指定排序時進行比較的函數,可以指定一個函數或者lambda函數,如:
students為類對象的list,沒個成員有三個域,用sorted進行比較時可以自己定cmp函數,例如這里要通過比較第三個數據成員來排序,代碼可以這樣寫:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])
(3)key為函數,指定取待排序元素的哪一項進行排序,函數用上面的例子來說明,代碼如下:
sorted(students, key=lambda student : student[2])
key指定的lambda函數功能是去元素student的第三個域(即:student[2]),因此sorted排序時,會以students所有元素的第三個域來進行排序。
二、普通用法:
1.原址排序
1)列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]
2.副本排序
1)[:]分片方法
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。
2)sorted方法
sorted返回一個有序的副本,並且類型總是列表,如下:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
三、高級用法
1.自定義cmp比較函數
def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 調用內建函數cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
2.自定義key和reverse
1.reverse實現降序排序,需要提供一個布爾值,默認為False(升序排列)。
2.key在使用時必須提供一個排序過程總調用的函數:
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多級排序,先按照第3個元素排序,然後按照第2個元素排序:
print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
-------------------------------------------------------------------------------------------
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
四、operator.itemgetter函數
operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數為一些序號(即需要獲取的數據在對象中的序號),下面看例子。
a = [1,2,3]
>>> b=operator.itemgetter(1) //定義函數b,獲取對象的第1個域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定義函數b,獲取對象的第1個域和第0個的值
>>> b(a)
(2, 1)
要注意,operator.itemgetter函數獲取的不是值,而是定義了一個函數,通過該函數作用到對象上才能獲取值。
itemgetter在sort中的用法:
from operator import itemgetter
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多級排序,先按照第3個元素排序,然後按照第2個元素排序:
print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False)
print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False)
print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False)
--------------------------------------------------------------------------------------------------
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
Ⅲ python中,如圖,排序sort為啥不用賦值給一個中間變數就能打出來下面語句為啥又不行
list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值。
所以不需要創建變數接收。
你也可以理解為sort()改變的原來的列表,不會產生新的列表。
Ⅳ 如何對列表進行排序 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是的比較從左到右之一比較的,比較完第一個,如果
相等,比較第二個
Ⅳ Python里的sort語句
Python中的sort()函數是序列的內部函數,函數原型:
L.sort(cmp=None,key=None,reverse=False)
函數作用:它是把L原地排序,也就是使用後並不是返回一個有序的序列副本,而是把當前序列變得有序。
Python中sort()參數說明:
(1) cmp參數
cmp接受一個函數,拿整形舉例,形式為:
deff(a,b):
returna-b
如果排序的元素是其他類型的,如果a邏輯小於b,函數返回負數;a邏輯等於b,函數返回0;a邏輯大於b,函數返回正數就行了。
(2) key參數
key也是接受一個函數,不同的是,這個函數只接受一個元素,形式如下:
deff(a):
returnlen(a)
key接受的函數返回值,表示此元素的權值,sort將按照權值大小進行排序
(3) reverse參數
接受False 或者True 表示是否逆序
Python中sort()函數舉例:
(1)按照元素長度排序
L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff(x):
returnlen(x)
sort(key=f)
printL
//輸出:
//[{1:9},{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6}]
(2)按照每個字典元素裡面key為1的元素的值排序
L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff2(a,b):
returna[1]-b[1]
L.sort(cmp=f2)
printL
//輸出:
//[{1:1,2:4,5:6},{1:3,6:3},{1:5,3:4},{1:9}]
Ⅵ python 獲取列表元素有幾種方式,常見的是哪種
Python中列表常見的方法有哪些?
Python列表定義:按特定順序排列的元素組成。在Python中,用方括弧[]來表示列表,並用逗號來分隔其中的元素。Python列表是編程中很常見的數據類型 。
列表是一種可修改的集合類型,其元素可以是數字、string等基本類型,也可以是列表、元組、字典等集合對象,甚至可以是自定義的類型。其定義方式如下:>>> nums = [1,2,3,4]>>> type(nums)>>> print nums[1, 2, 3, 4]>>> strs = ["hello","world"]>>> print strs['hello', 'world']>>> lst = [1,"hello",False,nums,strs]>>> type(lst)>>> print lst[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']]
下面我們來看一下列表中有哪些常見的方法:count():統計某個元素在列表中出現的次數。index():從列表中找出某個值第一個匹配項的索引位置。append():在列表末尾添加新對象。extend():在列表末尾一次性追加另一個序列的多個值。insert():在列表的指定位置插入對象。pop():移除列表中的一個元素(默認最後一個元素),並且返回該元素的值。remove():移除列表中某個值的第一個匹配項。reverse():將列表中的元素反向,不重新拷貝一個列表。reversed():將列表中的元素反向,重新拷貝一個列表。sort():將列表中的元素排序,不重新拷貝一個列表。sortd():將列表中的元素排序,重新拷貝一個列表。():淺拷貝,只是給原來的列表貼上了一個新標簽,對於一個復雜對象的子對象並不會完全復制,如果有子列表,改變原來的值,新的拷貝對象也會改變。deep():深拷貝,將復雜對象的每一層復制一個單獨的個體出來。就是完全拷貝。常見內置函數:max()、min()、sum()、len()、all()、any()、zip()、enumerate()由於文章篇幅有限,具體的代碼,推薦大家看這篇文章:https://www.jianshu.com/p/da6e449f4c6a
Ⅶ Python中,如何給列表排序
Python中給列表排序的方式有很多,可以自己實現,也可以用Python提供的方法
使用Python提供的方法:
列表.sort()
列表.sort(reverse=True)
自己實現:
num_list = [64, 34, 25, 12, 22, 11, 90]
print(num_list)
n = len(num_list)
# 遍歷所有數組元素
for i in range(n):
for j in range(0, n - i - 1):
if num_list[j] > num_list[j + 1]:
num_list[j], num_list[j + 1] = num_list[j + 1], num_list[j]
print(num_list)
代碼發到這邊格式有點亂,有需要的話可以去到黑馬程序員社區。有很多計算機技術的基礎入門和高級進階的內容,源碼什麼的也都有。
Ⅷ (小白求教)python中怎麼用sort對某個列表排序
是排了順序的喲!
A和a是不同的,排序是按照ascii碼排的,大寫字母的ascii碼在小寫字母之前。比如A的ascii碼為65,a的ascii碼為97。所以在排序時,大寫字母開頭的單詞會排在前面。
你要是想忽略大小寫,同時保留原始的大小寫的話,可以修改all_words.sort()為all_words.sort(key=lambda x: x.lower())
Ⅸ 為什麼python內置的sort比自己寫的快速排序快100倍
主要原因,內置函數用C寫的。在Python語言內無論如何造不出內置函數的輪子。這也是通常C跟C++語言用戶更喜歡造基礎演算法的輪了的原因。因為C/C++用戶真有條件寫出匹敵標准庫的演算法,但很多高級語言不行,不是程序員技術差,是客觀條件就根本做不到。
你比如說Java語言沒人造字元串的輪子,C++光一個字元串類就有無數多的實現。是因為C+用戶更喜歡寫字元串類嗎?顯然不是,一方面是因為Java語言內沒法造出匹敵Java內置標准庫演算法的輪子,而C++真的可以,另外一個比較慘的原因是C++標准庫的字元串功能太弱了,大多數高級語言的字元串類功能都比C+標准庫字元串類功能更強。
Cpp內置的排序是快排和堆排的結合,最壞時間復雜度為nlogn,而快排最壞是n2。至於python內部的排序,我認為是一個道理,不會簡簡單單是一個快排,舉個簡單例子,當你數據已經是有序的時候,再傳入快排肯定就不合適。那你設置排序函數的時候,是不是預先將他打亂,再進行快排會更好呢。當然具體不會這么簡單,只是我認為官方給的介面都是很精妙的,很值得學習。
一方面Python中sort函數是用C語言寫的,C++內部的sort是由快排,直接插入和堆排序混合的,當數據量比較大的時候先用的快排,當數據量小的時候用直接插入,因為當數據量變小時,快排中的每個部分基本有序,接近直接插入的最好情況的時間復雜度O(n),就比快排要好一點了。
另外一方面這個的底層實現就是歸並排序。,只是使用了Python無法編寫的底層實現,從而避免了Python本身附加的大量開銷,速度比我們自己寫的歸並排序要快很多,所以說我們一般排序都盡量使用sorted和sort。
Ⅹ 關於Python中sort函數賦值的問題
Python中的sort()方法用於數組排序,本文以實例形式對此加以詳細說明:
一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
123
x = [4, 6, 2, 1, 7, 9]x.sort()print x # [1, 2, 4, 6, 7, 9]
如果需要一個排序好的副本,同時保持原有列表不變,怎麼實現呢
12345
x =[4, 6, 2, 1, 7, 9]y = x[ : ]y.sort()print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。
另一種獲取已排序的列表副本的方法是使用sorted函數:
1234
x =[4, 6, 2, 1, 7, 9]y = sorted(x)print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]
sorted返回一個有序的副本,並且類型總是列表,如下:
1
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定義比較函數
可以定義自己的比較函數,然後通過參數傳遞給sort方法:
12345678910111213
def comp(x, y):if x < y:return 1elif x > y:return -1else:return 0 nums = [3, 2, 8 ,0 , 1]nums.sort(comp)print nums # 降序排序[8, 3, 2, 1, 0]nums.sort(cmp) # 調用內建函數cmp ,升序排序print nums # 降序排序[0, 1, 2, 3, 8]
三、可選參數
sort方法還有兩個可選參數:key和reverse
1、key在使用時必須提供一個排序過程總調用的函數:
123
x = ['mmm', 'mm', 'mm', 'm' ]x.sort(key = len)print x # ['m', 'mm', 'mm', 'mmm']
2、reverse實現降序排序,需要提供一個布爾值:
123
y = [3, 2, 8 ,0 , 1]y.sort(reverse = True)print y #[8, 3, 2, 1, 0]