日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 多个字符串排序_Python小白干货宝典:sorted()函数:列表元素排序

發布時間:2023/12/2 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 多个字符串排序_Python小白干货宝典:sorted()函数:列表元素排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:

sorted() 函數對所有可迭代的對象進行排序操作。

內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。

語法:

sorted 語法:

sorted(iterable, cmp=None, key=None, reverse=False)

返回值:返回重新排序的列表。

參數說明:

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大于則返回1,小于則返回-1,等于則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。無論是 sort() 還是 sorted() 函數,傳入參數 key 比傳入參數 cmp 效率要高。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

cmp()函數用于比較2個對象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1

語法:

cmp( x, y )

參數:

  • x -- 數值表達式。
  • y -- 數值表達式。

reverse()函數:用于反向列表中元素。

語法:

list.reverse()

該方法沒有返回值,但是會對列表的元素進行反向排序。

sorted 的使用方法:

1、默認情況下,sorted 函數將按列表升序進行排序,并返回一個新列表對象,原列表保持不變,最簡單的排序。

nums = [3,4,5,2,1]>>> sorted(nums)[1, 2, 3, 4, 5]

2、降序排序,如果要按照降序排列,只需指定參數 reverse=True 即可

sorted(nums, reverse=True)[5, 4, 3, 2, 1]

3、如果要按照某個規則排序,則需指定參數key, key 是一個函數對象,例如字符串構成的列表,我想按照字符串的長度來排序

chars = ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']>>> sorted(chars, key=len)['a', 'is', 'from', 'test', 'This', 'Andrew', 'string']

len是內建函數,sorted 函數在排序的時候會用len去獲取每個字符串的長度來排序。 有些人可能使用匿名函數 key=lambda x: len(x) ,

4、如果是一個復合的列表結構,例如由元組構成的列表,要按照元組中的第二個元素排序,那么可以用 lambda 定義一個匿名函數。

students = [('zhang', 'A'), ('li', 'D'), ('wang', 'C')]>>> sorted(students, key=lambda x: x[1])[('zhang', 'A'), ('wang', 'C'), ('li', 'D')]

這里將按照字母 A-C-D 的順序排列。

如果要排序的元素是自定義類,例如Student類按照年齡來排序,則可以寫成

a = [5,7,6,3,4,1,2]>>> b = sorted(a) # 保留原列表>>> a [5, 7, 6, 3, 4, 1, 2]>>> b[1, 2, 3, 4, 5, 6, 7] >>> L=[('b',2),('a',1),('c',3),('d',4)]>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函數[('a', 1), ('b', 2), ('c', 3), ('d', 4)]>>> sorted(L, key=lambda x:x[1]) # 利用key[('a', 1), ('b', 2), ('c', 3), ('d', 4)] >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>> sorted(students, key=lambda s: s[2]) # 按年齡排序[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] >>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>>

6、和數據庫的排序一樣,sorted 也可以根據多個字段來排序,例如我有先要根據age排序,如果age相同的則根據grade排序,則可以使用元組:

sorted(student_objects, key=lambda t:(t.age, t.grade))[('dave', 'B', 10), ('lily', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]

7、同樣的,對于自定義類,也有一種更高效的方法指定key

from operator import attrgetter>>> sorted(student_objects, key=attrgetter('age'))[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

如果參與排序的字段有兩個怎么辦?

sorted(student_objects, key=attrgetter('grade', 'age'))[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

8、前面碰到的排序場景都是建立在兩個元素是可以互相比較的前提下,例如數值按大小比較, 字母按順序比較。

如果遇到本身是不可比較的,需要我們自己來定義比較規則的情況如何處理呢?

nums = [2, 1.5, 2.5, '2', '2.5']>>> sorted(nums)TypeError: '<' not supported between instances of 'str' and 'int'

一個整數列表中,可能有數字,字符串,在Python3中,字符串與數值是不能比較的,而Python2中任何類型都可以比較,這是兩個版本中一個很大的區別:

python2>>> "2.5" > 2True# python3>>> "2.5" > 2TypeError: '>' not supported between instances of 'str' and 'int'

9、關于 sorted 函數,當遇到需要自定義比較操作的數據,Python2和Python3之間的區別是:

Python2中的sorted 可以指定cmp關鍵字參數,可以通過 cmp=compare 來實現,

Python3中還需要導入functools.cmp_to_key實現

sorted()函數使用范圍:

  • 對字典進行排序(中根據字典的值進行排序)
  • 多維list排序
  • 字典中混合list排序
  • List 中混合字典排序
  • 對字符串進行排序

sort()與sorted()的區別

1、相比于 sort(),sorted() 使用的范圍更為廣泛,兩者的函數形式分別如下:

sorted(iterable[, cmp[, key[, reverse]]]) s.sort([cmp[, key[, reverse]]])

2、sorted() 作用于任意可迭代的對象,而 sort()一般作用于列表。

a = (1,2,4,2,3)>>> a.sort()Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'tuple' object has no attribute 'sort'>>> sorted(a)[1, 2, 2, 3, 4]

下面的例子中針對元組使用 sort() 方法會拋出 AttributeError,而使用 sorted() 函數則 沒有這個問題。

3、當排序對象為列表的時候兩者適合的場景不同。sorted() 函數會返回一個排序后的列表,原有列表保持不變;而 sort() 函數會直接修改原有列表,永久改變,無法返回,函數返回為 None。

a=['1',1,'a',3,7,'n']>>> sorted(a)[1, 3, 7, '1', 'a', 'n']>>> a['1', 1, 'a', 3, 7, 'n']>>> print a.sort()None>>> a[1, 3, 7, '1', 'a', 'n']

如果實際應用過程中需要保留原有列表,使用 sorted() 函數較為適合,否則可以選擇sort() 函數,因為 sort() 函數不需要復制原有列表,消耗的內存較少,效率也較高。

總結

以上是生活随笔為你收集整理的c++ 多个字符串排序_Python小白干货宝典:sorted()函数:列表元素排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。