Python有没有这种简单任务的简写方式?

9 投票
2 回答
23543 浏览
提问于 2025-04-17 12:52

我刚开始学习大家常说的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]

这个形式叫做“列表推导式”。它的基本结构有四个部分:

  1. 你想要放入输出列表的内容。可以是任何与第二部分定义的变量相关的表达式。在这个例子中,就是元素x,没有任何修改;

  2. 一个变量,或者表达式,用来表示输入列表中的一个元素。紧跟在for关键字后面,列表中的每个元素都会被绑定到这个变量上(如果你的列表包含复杂对象,可以使用解构赋值来只引用其中的特定部分)。在这个例子中,列表中的每个项目都绑定到x

  3. 输入列表。紧跟在in关键字后面,就是你要从中获取元素的列表(或其他可迭代对象)。在这个例子中,就是foo

  4. 一个条件,元素必须满足这个条件才能被包含在结果中(可选)。如果要包含这个条件,就加上if关键字,后面跟一个表达式来判断这个元素是否会被包含在输出列表中。在这个例子中,条件是这个数字必须是奇数。

撰写回答