国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python sorted函數詳解(高級篇)

2020-01-04 14:30:30
字體:
來源:轉載
供稿:網友

sorted 用于對集合進行排序(這里集合是對可迭代對象的一個統稱,他們可以是列表、字典、set、甚至是字符串),它的功能非常強大

1、對列表排序,返回的對象不會改變原列表

list = [1,5,7,2,4]sorted(list)Out[87]: [1, 2, 4, 5, 7]#可以設定時候排序方式,默認從小到大,設定reverse = False 可以從大到小sorted(list,reverse=False)Out[88]: [1, 2, 4, 5, 7]sorted(list,reverse=True)Out[89]: [7, 5, 4, 2, 1]

2、根據自定義規則來排序,使用參數:key

# 使用key,默認搭配lambda函數使用sorted(chars,key=lambda x:len(x))Out[92]: ['a', 'is', 'boy', 'bruce', 'handsome']sorted(chars,key=lambda x:len(x),reverse= True)Out[93]: ['handsome', 'bruce', 'boy', 'is', 'a']

3、根據自定義規則來排序,對元組構成的列表進行排序

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]#key=lambda x: x[1]中可以任意選定x中可選的位置進行排序sorted(tuple_list, key=lambda x: x[1]) Out[94]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]sorted(tuple_list, key=lambda x: x[0])Out[95]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]sorted(tuple_list, key=lambda x: x[2])Out[96]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

4、排序的元素是自定義類

class tuple_list: def __init__(self, one, two, three):  self.one = one  self.two = two  self.three = three def __repr__(self):  return repr((self.one, self.two, self.three))tuple_list_ = [tuple_list('A', 1,5), tuple_list('B', 3,2), tuple_list('C', 2,6)]sorted(tuple_list_, key=lambda x: x.one)Out[104]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]sorted(tuple_list_, key=lambda x: x.two)Out[105]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]sorted(tuple_list_, key=lambda x: x.three)Out[106]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

5、sorted 也可以根據多個字段來排序

class tuple_list: def __init__(self, one, two, three):  self.one = one  self.two = two  self.three = three def __repr__(self):  return repr((self.one, self.two, self.three))tuple_list_ = [tuple_list('C', 1,5), tuple_list('A', 3,2), tuple_list('C', 2,6)]# 首先根據one的位置來排序,然后根據two的位置來排序sorted(tuple_list_, key=lambda x:(x.one, x.two))Out[112]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]

6、使用operator 中的itemgetter方法和attrgetter方法

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]class tuple_list_class: def __init__(self, one, two, three):  self.one = one  self.two = two  self.three = three def __repr__(self):  return repr((self.one, self.two, self.three))tuple_list_ = [tuple_list_class('C', 1,5), tuple_list_class('A', 3,2), tuple_list_class('C', 2,6)]from operator import itemgettersorted(tuple_list, key=itemgetter(1))Out[119]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]from operator import attrgettersorted(tuple_list_, key=attrgetter('one')) # attrgetter 傳入的參數必須是strOut[120]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]# 如果是根據多個類的參數排序,按照參數定義順序from operator import attrgettersorted(tuple_list_, key=attrgetter('two','one'))Out[121]: [('C', 1, 5), ('C', 2, 6), ('A', 3, 2)]

高級用法

有時候,我們要處理的數據內的元素不是一維的,而是二維的甚至是多維的,那要怎么進行排序呢?這時候,sorted()函數內的key參數就派上用場了!從幫助信息上可以了解到,key參數可傳入一個自定義函數。那么,該如何使用呢?讓我們看看如下代碼:

>>>l=[('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]>>>sorted(l, key=lambda x:x[0])Out[39]: [('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]>>>sorted(l, key=lambda x:x[0], reverse=True)Out[40]: [('e', 3), ('d', 4), ('c', 6), ('b', 2), ('a', 1)]>>>sorted(l, key=lambda x:x[1])Out[41]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]>>>sorted(l, key=lambda x:x[1], reverse=True)Out[42]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

這里,列表里面的每一個元素都為二維元組,key參數傳入了一個lambda函數表達式,其x就代表列表里的每一個元素,然后分別利用索引返回元素內的第一個和第二個元素,這就代表了sorted()函數利用哪一個元素進行排列。而reverse參數就如同上面講的一樣,起到逆排的作用。默認情況下,reverse參數為False。
當然,正如一開始講到的那樣,如果想要對列表直接進行排序操作,可以用成員方法sort()來做:

>>>l.sort(key=lambda x : x[1])>>>lOut[45]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]>>>l.sort(key=lambda x : x[1], reverse=True)>>>lOut[47]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

對于三維及以上的數據排排序,上述方法同樣適用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南安市| 平湖市| 鸡泽县| 新密市| 静安区| 旺苍县| 桃江县| 新巴尔虎右旗| 商洛市| 山东省| 浮梁县| 涪陵区| 巨野县| 轮台县| 米易县| 长子县| 德安县| 清水县| 喀什市| 和平县| 易门县| 九龙城区| 台前县| 丹寨县| 宾阳县| 轮台县| 固始县| 瑞昌市| 河池市| 南皮县| 武汉市| 吕梁市| 英山县| 和林格尔县| 滨海县| 金塔县| 沈丘县| 元阳县| 吉安县| 扶沟县| 大荔县|