如何将列表中的整数与常量和覆盖列表值相乘

时间:2016-06-03 19:53:35

标签: python list for-loop integer

我有一个非常基本的问题。如何将列表中的整数与常量相乘?如果列表中的整数通过逻辑测试,我希望它的值乘以常量。问题是,当我之后打印列表时,整数没有改变。提前谢谢了。

x = [10,25,66]

def multiply(list):
    for i in list:
        if i%5==0:
            i = i*2
            print i 

multiply(x)
print x 

4 个答案:

答案 0 :(得分:3)

您可以使用列表推导来执行此操作

>>> x = [10,25,66]
>>> x = [i*2 if i%5==0 else i for i in x]
>>> x
[20, 50, 66]

答案 1 :(得分:1)

你正在将项目本身乘以而不是分配给列表。

这样做

x = [10,25,66]

def multiply(list):
    for i in range(len(list)):
        if list[i]%5==0:
            list[i] = list[i] * 2

multiply(x)
print x

所以我改变的是现在你正在获取for循环中的索引。然后检查条件,之后将新值分配回列表,这就是使更改永久化的原因。

答案 2 :(得分:0)

您可以通过使用enumerate遍历列表并修改符合条件的索引来修改同一列表:

x = [10,25,66]

def multiply(lst):
    for index, value in enumerate(lst):
        if value % 5 == 0:
            lst[index] = value * 2
            print lst[index]

multiply(x)
print x
# [20, 50, 66]

答案 3 :(得分:0)

numpy解决方案:

In [56]: x = np.array([10,25,66])

In [57]: x[x % 5 == 0] *= 2  # solution from @Sven Marnach

In [58]: x
Out[58]: array([20, 50, 66])