Python有没有这种简单任务的简写方式?
我刚开始学习大家常说的Python语言。之前我一直在用C语言。发现Python作为一种现代脚本语言,在处理各种任务时要简洁很多。
所以我在想,如果我有一个列表 foo = [1, 2, 3, 4, 5]
,我想把里面所有的奇数挑出来放到 bar
里。在C语言中,我可能会用一个循环,检查 foo
中的每个数字,然后把需要的元素复制到 bar
。你们在Python中是怎么做到的呢?
2 个回答
5
filter
函数就是你需要的东西:
bar = filter(lambda x: x % 2 == 1, foo)
这个表达式 lambda x: x % 2 == 1
基本上等同于
def isOdd(x):
return x % 2 == 1
23
bar = [x for x in foo if x % 2 == 1]
这个形式叫做“列表推导式”。它的基本结构有四个部分:
你想要放入输出列表的内容。可以是任何与第二部分定义的变量相关的表达式。在这个例子中,就是元素
x
,没有任何修改;一个变量,或者表达式,用来表示输入列表中的一个元素。紧跟在for关键字后面,列表中的每个元素都会被绑定到这个变量上(如果你的列表包含复杂对象,可以使用解构赋值来只引用其中的特定部分)。在这个例子中,列表中的每个项目都绑定到
x
;输入列表。紧跟在in关键字后面,就是你要从中获取元素的列表(或其他可迭代对象)。在这个例子中,就是
foo
;一个条件,元素必须满足这个条件才能被包含在结果中(可选)。如果要包含这个条件,就加上if关键字,后面跟一个表达式来判断这个元素是否会被包含在输出列表中。在这个例子中,条件是这个数字必须是奇数。