【问题标题】:How to multiply integers in list with constant and overwrite list value如何将列表中的整数与常量相乘并覆盖列表值
【发布时间】:2016-10-03 23:48:56
【问题描述】:

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

x = [10,25,66]

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

multiply(x)
print x 

【问题讨论】:

  • 在这种情况下考虑使用 numpy,您可以直接将数组“乘以 2”
  • 您永远不会在任何地方分配您的更改... (i = i*2)

标签: python list for-loop integer


【解决方案1】:

您可以通过使用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]

【讨论】:

  • 使用枚举比范围更好
  • @Keatinge 感谢您的关注。看起来更好
【解决方案2】:

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])

【讨论】:

  • 一个更简洁的解决方案是修改数组而不是创建一个新数组是x[x % 5 == 0] *= 2
  • @SvenMarnach,是的,确实,谢谢!这是更好更快的解决方案!
【解决方案3】:

好吧,您是在将项目本身相乘而不是分配给列表。

这样就可以了

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 循环中获取索引。然后检查条件,然后将新值分配回列表,这就是使更改永久化的原因。

【讨论】:

    【解决方案4】:

    你可以使用列表推导来做到这一点

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

    【讨论】:

    • 原始代码尝试修改传递给函数的列表。此代码改为创建一个新列表。 (不一定是问题,但有显着差异。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多