激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 淺析Python中的多條件排序實現

淺析Python中的多條件排序實現

2020-08-26 09:24mattkang Python

Python中使用sort方法和sorted函數排序時關鍵就在于key參數值的編寫技巧,這里我們來舉兩個實例淺析Python中的多條件排序實現:

多條件排序及itemgetter的應用
曾經客戶端的同事用as寫一大堆代碼來排序,在得知Python排序往往只需要一行,驚訝無比,遂對python產生濃厚的興趣。
之前在做足球的積分榜的時候需要用到多條件排序,如果積分相同,則按凈勝球,再相同按進球數,再相同按失球數。
即按積分P、凈勝球GD、進球GS、失球GA這樣的順序。
在python中,排序非常方便,排序的參數主要有key、reverse。參數cmp不建議使用了,在python3.0被移除了,用參數key代替。
對于多條件排序,也非常簡單,只需要記住下面這句話就行。 即參數key指定的函數返回一個元組,多條件排序的順序將按照元組的順序。
看了下面的代碼你就明白了,下面是2010世界杯小組賽A組的積分榜。

?
1
2
3
4
5
6
teamitems = [{'team':'France'   , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4},
      {'team':'Uruguay'   , 'P':7 , 'GD':4 , 'GS':4 , 'GA':0},
      {'team':'SouthAfrica' , 'P':4 , 'GD':-2 , 'GS':3 , 'GA':5},
      {'team':'Mexico'   , 'P':4 , 'GD':1 , 'GS':3 , 'GA':2}]
 
print sorted(teamitems ,key = lambda x:(x['P'],x['GD'],x['GS'],x['GA']),reverse=True)

輸出

?
1
2
3
4
[{'P': 7, 'GD': 4, 'GS': 4, 'GA': 0, 'team': 'Uruguay'},
 {'P': 4, 'GD': 1, 'GS': 3, 'GA': 2, 'team': 'Mexico'},
 {'P': 4, 'GD': -2, 'GS': 3, 'GA': 5, 'team': 'SouthAfrica'},
 {'P': 1, 'GD': -3, 'GS': 1, 'GA': 4, 'team': 'France'}]

即小組排名是烏拉圭、墨西哥、南非、法國。

不過這樣一個個取字典的鍵值有點啰嗦,用itemgetter更簡潔優雅,上面那句代碼可以用如下替換。

?
1
2
from operator import itemgetter
print sorted(teamitems ,key = itemgetter('P','GD','GS','GA'),reverse=True)

有的升序有的降序的情況下怎么多條件排序
之前在統計導出各區服玩家消費的時候需要進行升序降序混搭的多條件排序。
需求是這樣的。區服從小到大排,如果區服相同,則按消費從大到小排。
實現方法是利用python的sort算法是穩定排序,對數據進行多次排序,先排次要條件,后排主要條件。
還有一種更簡潔的一行流的方法,不過只有當待排數據是數值的時候才有效。此方法利用相反數的性質,在前面加個負號。
下面上代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#假設數據如下。
data = '''''
區服,玩家id,累積消費
3,a,2380
1,b,11900
4,e,3250
1,k,100
4,j,599
2,m,872
3,f,5560
1,y,2500
'''
 
items = [x.split(',') for x in filter(None,data.split('\n'))[1:]] #去掉空行和忽略首行并把字符串轉成二維數組
#方法一
items.sort(key=lambda x:int(x[2]),reverse=True)#先排消費
items.sort(key=lambda x:int(x[0]))#然后排區服
print '\n'.join([','.join(x) for x in items])
print '-----------'
 
#方法二
items = sorted(items,key=lambda x:(int(x[0]),-int(x[2])))
print '\n'.join([','.join(x) for x in items])

淺析Python中的多條件排序實現

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲视频在线观看免费 | 色七七久久影院 | 久久99国产伦子精品免费 | 亚洲小视频在线观看,com | 91看片成人 | 精品一区二区久久久久 | 精品一区二区三区在线观看国产 | 国产毛片在线看 | 国产一国产精品一级毛片 | 91在线视频免费观看 | 私库av在线免费观看 | 欧美一级一区二区三区 | jizzjizz中国人少妇中文 | 成人视屏在线 | 亚洲福利在线视频 | 国产午夜亚洲精品 | 爽爽视频免费看 | 91九色丨porny丨国产jk | 欧美日本另类 | 中国hdxxxx护士爽在线观看 | 免费专区 - 91爱爱 | 久久久成人免费视频 | 成片免费观看视频大全 | 中国黄色一级生活片 | xxxeexxx性国产| 亚洲午夜久久久精品一区二区三区 | 久久国产精品久久久久久电车 | 久久网国产 | 久久久久一本一区二区青青蜜月 | lutube成人福利在线观看污 | 欧美一级一区二区三区 | 免费观看一区二区三区 | 狠狠操电影 | 日韩高清影视 | 久久91精品国产91久久yfo | 久久精品一区二区三区四区五区 | 毛片大全在线观看 | 视频一区二区国产 | 最新av免费网址 | 女人裸体让男人桶全过程 | 亚洲最新色 |