Python 列表推导 - 简单

7 投票
3 回答
12122 浏览
提问于 2025-04-17 03:29

我有一个列表,想要对其中符合特定条件的项使用某个函数,而不改变其他项。

举个例子:假设我只想把偶数乘以2。

a_list = [1, 2, 3, 4, 5]

想要的结果是:

a_list => [1, 4, 3, 8, 5]

但是 [elem * 2 for elem in a_list if elem %2 == 0] 这个写法的结果是 [4, 8](它不仅过滤了,还只留下了偶数)。

那我该怎么做才对呢?

3 个回答

0

你可以使用lambda表达式:

>>> a_list = [1, 2, 3, 4, 5]
>>> f = lambda x: x%2 and x or x*2
>>> a_list = [f(i) for i in a_list]
>>> a_list
[1, 4, 3, 8, 5]

编辑 - 考虑到 agf 的评论,我做了我代码的第二个版本:

>>> a_list = [1, 2, 3, 4, 5]
>>> f = lambda x: x if x%2 else x*2
>>> a_list = [f(i) for i in a_list]
>>> a_list
[1, 4, 3, 8, 5]
2
a_list = [1, 2, 3, 4, 5]

print [elem*2 if elem%2==0 else elem  for elem in a_list ]  

或者,如果你有一个非常长的列表,想要直接在这个列表上进行修改:

a_list = [1, 2, 3, 4, 5]

for i,elem in enumerate(a_list):
    if elem%2==0:
        a_list[i] = elem*2

所以,只有偶数位置的元素会被修改

18

使用一个条件表达式

[x * 2 if x % 2 == 0 else x
 for x in a_list]

(数学爱好者补充:你也可以用

[x * (2 - x % 2) for x in a_list]

来解决这个特定的情况,不过我还是更喜欢第一种方法;)

撰写回答