国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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中的多條件排序實現

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美在线视频网 | 精品久久久久久亚洲精品 | 久久成人精品视频 | 在线a视频 | 999精品视频一区二区三区 | 黄色成人一级片 | 日韩欧美在线一区二区 | 午夜影院在线观看 | 香蕉福利视频 | 久久99精品久久久久久水蜜桃 | 亚洲天堂久久 | 午夜精品久久久久久久男人的天堂 | 操操日日 | 国产视频福利 | 日韩av电影在线观看 | 午夜影院在线 | 日本欧美一区二区 | 99re在线 | 黄色免费网站 | 日韩城人网站 | 亚洲精品一 | 久久国产精品久久久久久电车 | 91电影在线| 一区二区三区 在线 | 精品在线一区二区 | 久久精品久久久 | 免费成年人视频在线观看 | 免费观看av电影 | 国产精品美女久久久久aⅴ国产馆 | 在线国v免费看 | 精品欧美一区二区三区久久久 | 亚洲一区二区在线免费观看 | 精品香蕉一区二区三区 | 91亚洲国产成人久久精品网站 | 午夜精| 精品无码久久久久久国产 | 亚洲免费一区 | 最新天堂中文在线 | 日韩免费网站 | 国产毛片在线 | 中文字幕第二页 |