Python列表理解 - 简单

时间:2011-10-01 11:13:54

标签: python list-comprehension

我有一个列表,我想只对那些满足某个条件的条目使用某个函数 - 保留其他条目不被修改。

示例:假设我想仅将那些偶数的元素乘以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 :(得分:18)

使用conditional expression

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

(数学极客注意:你也可以用

解决这个特殊情况
[x * (2 - x % 2) for x in a_list]

但无论如何我更喜欢第一个选项;)

答案 1 :(得分: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

所以,只修改偶数元素

答案 2 :(得分: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]