我有一个非常基本的问题。如何将列表中的整数与常量相乘?如果列表中的整数通过逻辑测试,我希望它的值乘以常量。问题是,当我之后打印列表时,整数没有改变。提前谢谢了。
x = [10,25,66]
def multiply(list):
for i in list:
if i%5==0:
i = i*2
print i
multiply(x)
print x
答案 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])