簡體   English   中英

在 sorted 方法中使用 if else f'y{x}' 評估 lambda function

[英]Evaluating a lambda function with if else f'y{x}' inside the sorted method

我有以下排序問題:

給定一個字符串列表,返回排序后的字符串列表,但首先將所有以“x”開頭的字符串分組。

示例: ['mix', 'banana','xyz', 'apple', 'xanadu', 'aardvark'] 將返回: ['xanadu', 'xyz', 'aardvark', 'apple', 'banana' ,'混合']

我通過將列表拆分為 2 來解決:

def front_x(words):

    return [w for w in words if w[0] == "x"] + [w for w in words if w[0] != "x"]

這個問題的另一個pythonic解決方案是使用sorted方法,如下所示:

def front_x(words):

    return sorted(words, key=lambda x: x if x[0] == 'x' else f'y{x}')

我很難理解else之后發生了什么。 有好心人幫幫我嗎? 我很感激。

return sorted(words, key=lambda x: x if x[0] == 'x' else f'y{x}')

翻譯:

"返回words的排序版本。對於words中的每個項目x ,排序時使用x進行比較,但前提是x[0]等於字符'x' 。否則,append 'y'x的前面和用它來比較”

f'y{x}'語法是f-string 語法 它相當於:

"y" + str(x)

還有很多其他等效的方法可以將字符插入字符串。 這就是這里的做法。

所以,如果你的單詞列表是:

aardvark
xylophone
xamarin
xenophobia
zipper
apple
bagel
yams

該列表將被排序,就好像它包含以下內容:

yaardvark
xylophone
xamarin
xenophobia
yzipper
yapple
ybagel
yyams

因此 output 將是:

xamarin
xenophobia
xylophone
aardvark
apple
bagel
yams
zipper

因此,發生的情況是,當列表排序時,以'x'開頭的項目將始終出現在任何其他項目之前。

f'y{x}'在將字符'y'附加到原始字符串 ( x ) 的f 字符串表達式中。 這樣,所有不以'x'開頭的項目都將按照以'y'開頭的方式進行排序這會將它們放在所有以'x'開頭的項目之后。

例如, 'banana'將被排序'ybanana' ,自然將其放在'xyz'之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM