我刚刚开始学习长期听到的python语言。我之前一直在和C合作。我发现python,因为现代脚本语言在各种任务上都非常简洁。
所以我想知道,如果我有一个列表foo = [1, 2, 3, 4, 5]
,我想从中挑选出所有奇数到bar
。在C中,我可能会使用循环并检查foo
中的每个数字,并将所需的元素复制到bar
中。你们这个“python风格”做什么?
答案 0 :(得分:19)
bar = [x for x in foo if x % 2 == 1]
此表单称为"list comprehension"。在其基本形式中,它有4个部分:
要包含在输出列表中的内容。可以是涉及第二部分(下面)中定义的变量的任何表达式。在这种情况下,元素x
,未修改;
表示输入列表元素的变量或表达式。在 for 关键字之后,列表的每个元素都将绑定到该变量(如果列表包含复杂对象,则可以使用destructuring assignment仅引用它的特定部分)。在这种情况下,列表中的每个项目都绑定到x
;
输入列表。在 in 关键字后面,您将从中获取元素的列表(或其他可迭代的)。在这种情况下,foo
;
元素必须满足的条件才能包含在结果中(可选)。如果包含,请添加关键字 if ,后跟表达式,以确定该元素是否将包含在输出列表中。在这种情况下,如果数字是奇数,那就是。
答案 1 :(得分:5)
filter
功能:
bar = filter(lambda x: x % 2 == 1, foo)
表达式lambda x: x % 2 == 1
基本上等同于
def isOdd(x):
return x % 2 == 1