成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

sorted函數(shù)

ixlei / 2036人閱讀

摘要:一需要用到的函數(shù)需要用到的函數(shù)很少,基本上就是和。這個參數(shù)的默認(rèn)值是恒等函數(shù),也就是默認(rèn)用元素自己的值來排序。后的函數(shù)會代入列表里的每一項(xiàng)返回一個優(yōu)先級數(shù)字,并以這個優(yōu)先級數(shù)字排序

一、需要用到的函數(shù)

需要用到的函數(shù)很少,基本上就是sorted()和lambda。

sorted()函數(shù)原型:

sorted(iterable[,key][,reverse])

可見sorted()可以接受3個參數(shù),需要排序的變量必不可少,然后是key指定排序的元素,reverse指定是否逆序。

key:一個只有一個參數(shù)的函數(shù),這個函數(shù)會被用在序列里的每一個元素上,所產(chǎn)生的結(jié)果將是排序算法依賴的對比關(guān)鍵字。比如說,在對一些字符串排序時,可以用key=len來實(shí)現(xiàn)根據(jù)字符串的長度進(jìn)行排序。這個參數(shù)的默認(rèn)值是恒等函數(shù),也就是默認(rèn)用元素自己的值來排序 (key=lambda x: x)。

lambda實(shí)際上就是匿名函數(shù)

一般形式:

lambda arguments: expression

寫成函數(shù)形式就是

def (arguments):
    return expression

當(dāng)lambda和sorted()的key參數(shù)結(jié)合就有意想不到的效果了。

二、各種排序

1.簡單list排序

lis = ["a", "b", "c"]
print(sorted(lis))
# ["a", "b", "c"]
print(sorted(lis, reverse=True))
# ["c", "b", "a"]


2.dict的key排序

dic = {"c": 1, "b": 2, "a": 3} #字典排序默認(rèn)按照字典的key排序,返回的也是字典的key
print(sorted(dic))
# ["a", "b", "c"]
print(sorted(dic, reverse=True))
# ["c", "b", "a"]


3.dict的value排序

dic = {"c": 1, "b": 2, "a": 3}
print(sorted(dic, key=lambda k: dic[k])) #dic([k])就是value
# ["c", "b", "a"]
print(sorted(dic, key=lambda k: dic[k], reverse=True))
# ["a", "b", "c"]


4.list內(nèi)嵌套list排序

lis = [[4, 2, 9], [1, 5, 6], [7, 8, 3]]
print(sorted(lis, key=lambda k: k[0])) #列表內(nèi)的沒項(xiàng)代入key后的表達(dá)式,根據(jù)返回值排序
# [[1, 5, 6], [4, 2, 9], [7, 8, 3]]
print(sorted(lis, key=lambda k: k[1]))
# [[4, 2, 9], [1, 5, 6], [7, 8, 3]]
print(sorted(lis, key=lambda k: k[2]))
# [[7, 8, 3], [1, 5, 6], [4, 2, 9]]
print(sorted(lis, key=lambda k: k[0], reverse=True))
# [[7, 8, 3], [4, 2, 9], [1, 5, 6]]


5.dict內(nèi)嵌套dict排序

dic = {
    "a": {"x": 3, "y": 2, "z": 1},
    "b": {"x": 2, "y": 1, "z": 3},
    "c": {"x": 1, "y": 3, "z": 2},
}
print(sorted(dic, key=lambda k: dic[k]["x"]))
# ["c", "b", "a"]
print(sorted(dic, key=lambda k: dic[k]["y"]))
# ["b", "a", "c"]
print(sorted(dic, key=lambda k: dic[k]["z"]))
# ["a", "c", "b"]
print(sorted(dic, key=lambda k: dic[k]["x"], reverse=True))
# ["a", "b", "c"]


6.list內(nèi)嵌套dict排序

lis = [
    {"x": 3, "y": 2, "z": 1},
    {"x": 2, "y": 1, "z": 3},
    {"x": 1, "y": 3, "z": 2},
]
print(sorted(lis, key=lambda k: k["x"]))
# [{"z": 2, "x": 1, "y": 3}, {"z": 3, "x": 2, "y": 1}, {"z": 1, "x": 3, "y": 2}]
print(sorted(lis, key=lambda k: k["y"]))
# [{"z": 3, "x": 2, "y": 1}, {"z": 1, "x": 3, "y": 2}, {"z": 2, "x": 1, "y": 3}]
print(sorted(lis, key=lambda k: k["z"]))
# [{"z": 1, "x": 3, "y": 2}, {"z": 2, "x": 1, "y": 3}, {"z": 3, "x": 2, "y": 1}]
print(sorted(lis, key=lambda k: k["x"], reverse=True))
# [{"z": 1, "x": 3, "y": 2}, {"z": 3, "x": 2, "y": 1}, {"z": 2, "x": 1, "y": 3}]



7.dict內(nèi)嵌套list排序

dic = {
    "a": [1, 2, 3],
    "b": [2, 1, 3],
    "c": [3, 1, 2],
}
print(sorted(dic, key=lambda k: dic[k][0]))
# ["a", "b", "c"]
print(sorted(dic, key=lambda k: dic[k][1]))
# ["b", "c", "a"]
print(sorted(dic, key=lambda k: dic[k][2]))
# ["c", "b", "a"]
print(sorted(dic, key=lambda k: dic[k][0], reverse=True))
# ["c", "b", "a"]

實(shí)例

1、給定一個只包含大小寫字母,數(shù)字的字符串,對其進(jìn)行排序,保證:

所有的小寫字母在大寫字母前面;
所有的字母在數(shù)字前面;
所有的奇數(shù)在偶數(shù)前面;

>>> s = "Sorting1234"
>>> "".join(sorted(s, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x)))
"ginortS1324"

2、排序一副FranchDeck。流暢的python書中示例

import collections

Card = collections.namedtuple("Card", ["rank", "suit"]) #命名元組

class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list("JQKA")  #2到10和JQKA
    suits = "spades diamonds clubs hearts".split()  #split默認(rèn)按空格生成列表

    def __init__(self):
        self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] #生成所有52張牌

    def __len__(self):
        return len(self._cards)  #可以用Len()方法

    def __getitem__(self, position):
        return self._cards[position]  #可以用索引或切片

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) #設(shè)置花色優(yōu)先級

def spades_high(card):
        rank_value = FrenchDeck.ranks.index(card.rank)  #找到當(dāng)前Card所在的索引:2的索引為0
        return rank_value * len(suit_values) + suit_values[card.suit] #返回當(dāng)前牌對應(yīng)的優(yōu)先級數(shù)字,如果沒有乘于len(suit_values)那么("2", "spades")和("4", "diamonds")的優(yōu)先級數(shù)字就一樣了,這里也可以直接乘于4或5,6....
    
#排序
>>> import Frenchcard
>>> deck = Frenchcard.FrenchDeck()
>>> for i in sorted(deck, key=b.spades_high): #sorted返回一個列表。key后的函數(shù)會代入deck列表里的每一項(xiàng)返回一個優(yōu)先級數(shù)字,并以這個優(yōu)先級數(shù)字排序
...     print(i)
Card(rank="2", suit="clubs")
Card(rank="2", suit="diamonds")
Card(rank="2", suit="hearts")
Card(rank="2", suit="spades")
Card(rank="3", suit="clubs")
Card(rank="3", suit="diamonds")
.............


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43689.html

相關(guān)文章

  • 數(shù)組排序函數(shù)-php數(shù)組函數(shù)(一)

    摘要:下列的所有排序函數(shù)都是直接作用于數(shù)組本身,而不是返回一個新的有序的數(shù)組。倒序并保持索引關(guān)系,按鍵名排序按鍵名倒序使用用戶自定義的比較函數(shù)對數(shù)組中的值進(jìn)行排序,要排序的數(shù)組需要用一種不尋常的標(biāo)準(zhǔn)進(jìn)行排序,那么應(yīng)該使用此函數(shù)。 數(shù)組排序,共13個 函數(shù)中有u的,能自定義比較函數(shù);有k的,按照鍵來排序;有r(reverse)的,倒序;有a(association)的,一定是鍵值關(guān)聯(lián),除了r...

    call_me_R 評論0 收藏0
  • 【重溫基礎(chǔ)】21.高階函數(shù)

    摘要:歡迎您的支持系列目錄復(fù)習(xí)資料資料整理個人整理重溫基礎(chǔ)篇重溫基礎(chǔ)對象介紹重溫基礎(chǔ)對象介紹重溫基礎(chǔ)介紹重溫基礎(chǔ)相等性判斷重溫基礎(chǔ)閉包重溫基礎(chǔ)事件本章節(jié)復(fù)習(xí)的是中的高階函數(shù),可以提高我們的開發(fā)效率。 本文是 重溫基礎(chǔ) 系列文章的第二十一篇。 今日感受:想家。 本人自己整理的【Cute-JavaScript】資料,包含:【ES6/ES7/ES8/ES9】,【JavaScript基礎(chǔ)...

    wua_wua2012 評論0 收藏0
  • 【重溫基礎(chǔ)】JS中的常用高階函數(shù)介紹

    摘要:也可以直接調(diào)用內(nèi)置方法常用高階函數(shù)方法的作用是接收一個函數(shù)作為參數(shù),對數(shù)組中每個元素按順序調(diào)用一次傳入的函數(shù)并返回結(jié)果,不改變原數(shù)組,返回一個新數(shù)組。 Ps. 晚上加班到快十點(diǎn),回來趕緊整理整理這篇文章,今天老大給我推薦了一篇文章,我從寫技術(shù)博客中收獲到了什么?- J_Knight_,感受也是很多,自己也需要慢慢養(yǎng)成記錄博客的習(xí)慣,即使起步艱難,難以堅(jiān)持,但還是要讓自己加油加油。 前...

    gitmilk 評論0 收藏0
  • 用sort實(shí)現(xiàn)orderby

    摘要:工作到了這個年數(shù)感覺那些基本函數(shù)語法已經(jīng)跟人合一了根本不會為操作一些數(shù)據(jù)結(jié)構(gòu)而思考半天了在做小程序的時候遇到了個的場景結(jié)果發(fā)現(xiàn)沒有以為的那么簡單也許是之前不求甚解的原因那么現(xiàn)在來解決的問題問題的產(chǎn)生與探討方向在小程序中有個將的某一條置頂?shù)男? 工作到了這個年數(shù), 感覺那些基本函數(shù)語法已經(jīng)跟人合一了, 根本不會為操作一些數(shù)據(jù)結(jié)構(gòu)而思考半天了. 在做小程序的時候遇到了個orderby的場景,...

    jiekechoo 評論0 收藏0
  • [譯]正確使用 sort() 方法

    摘要:方法參數(shù)該有一個可選參數(shù),允許此方法幫助對內(nèi)容進(jìn)行排序。例如,在非常大的數(shù)組中,可以使用新的方法來獲得更有效的排序函數(shù),而不是使用。在瀏覽器和節(jié)點(diǎn)中以全局對象的形式呈現(xiàn),并具有廣泛的支持包括。 英文原文: 《Usar correctamente el método sort()》 注意:內(nèi)容有做精簡和調(diào)整。 在過去的幾個星期里,我們在不同的團(tuán)隊(duì)中看到,一般來說都沒有使用 Array...

    dreambei 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<