在每个其他列表项Python上使用map

时间:2015-04-04 05:41:35

标签: python list python-2.7

假设我想将列表中的每个其他整数乘以2。

list = [1,2,3,4]
double = lambda x: x * 2
print map(double, list[::2])

我得到了所有其他项目的切片。

如果我想要破坏性地更改列表中的所有其他项目,那么我将返回列表[1, 4, 3, 8],该怎么办?

3 个答案:

答案 0 :(得分:6)

您可以指定切片:

>>> list_ = [1,2,3,4]
>>> double = (2).__mul__
>>> map(double, list_[1::2])
[4, 8]
>>> list_[1::2] = map(double, list_[1::2])
>>> list_
[1, 4, 3, 8]

答案 1 :(得分:3)

您确定要以功能方式执行此操作吗?这可能更容易阅读:

for i in range(1, len(l), 2):
    l[i] = l[i] * 2

或者你可以使用简单的列表理解并分配切片:

l[1::2] = [x * 2 for x in l[1::2]]

或者

l = [x * (2 if i % 2 == 1 else 1) for i, x in enumerate(l)]

答案 2 :(得分:1)

你可以改变lambda的定义

lst = [1,2,3,4]
double = lambda l: [l[x]*2 if x%2!=0 else l[x] for x in range(len(l))]
print lambda(lst)