[英]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.