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