python是否有这个简单任务的简写?

时间:2012-02-12 06:53:38

标签: python

我刚刚开始学习长期听到的python语言。我之前一直在和C合作。我发现python,因为现代脚本语言在各种任务上都非常简洁。

所以我想知道,如果我有一个列表foo = [1, 2, 3, 4, 5],我想从中挑选出所有奇数到bar。在C中,我可能会使用循环并检查foo中的每个数字,并将所需的元素复制到bar中。你们这个“python风格”做什么?

2 个答案:

答案 0 :(得分:19)

bar = [x for x in foo if x % 2 == 1]

此表单称为"list comprehension"。在其基本形式中,它有4个部分:

  1. 要包含在输出列表中的内容。可以是涉及第二部分(下面)中定义的变量的任何表达式。在这种情况下,元素x,未修改;

  2. 表示输入列表元素的变量或表达式。在 for 关键字之后,列表的每个元素都将绑定到该变量(如果列表包含复杂对象,则可以使用destructuring assignment仅引用它的特定部分)。在这种情况下,列表中的每个项目都绑定到x;

  3. 输入列表。在 in 关键字后面,您将从中获取元素的列表(或其他可迭代的)。在这种情况下,foo;

  4. 元素必须满足的条件才能包含在结果中(可选)。如果包含,请添加关键字 if ,后跟表达式,以确定该元素是否将包含在输出列表中。在这种情况下,如果数字是奇数,那就是。

答案 1 :(得分:5)

您正在寻找

filter功能:

bar = filter(lambda x: x % 2 == 1, foo)

表达式lambda x: x % 2 == 1基本上等同于

def isOdd(x):
    return x % 2 == 1