整数乘以错误的数字

Integers being multiplied by the wrong number

我试图将一个数组的一些值乘以 3,但是当我用它的新值打印数组时,我看到这些数字实际上已经乘以 2187 而不是 3。很奇怪。

for digit in digits:
    digits[0] = digits[0]*3
    digits[2] = digits[2]*3
    digits[4] = digits[4]*3
    digits[6] = digits[6]*3

数组中的原始数字是[1,2,3,4,5,6,7]

相乘后应该是:

[3,2,9,4,15,6,21]

相反,我们得到 [2187,2,6561,4,10935,6,15309]

您每次都在乘以它,因此数字很大!循环每次将值乘以 3

因此1会变成2187也就是1*3*3*3*3*3*3*3

  • 要么一次全部完成(去掉for循环)

    >>> digits =  [1,2,3,4,5,6,7]
    >>> digits[0] = digits[0]*3
    >>> digits[2] = digits[2]*3
    >>> digits[4] = digits[4]*3
    >>> digits[6] = digits[6]*3
    >>> digits
    [3, 2, 9, 4, 15, 6, 21]
    
  • 或者在循环中使用条件

    >>> digits =  [1,2,3,4,5,6,7]
    >>> for i, v in enumerate(digits):
    ...     if(i % 2 == 0):
    ...         digits[i] = v * 3
    ... 
    >>> digits
    [3, 2, 9, 4, 15, 6, 21]
    

    这里我使用了 enumerate,它将 return 一个索引和值的元组。

  • 或者您甚至可以使用步长为 2

    的范围函数
    >>> digits =  [1,2,3,4,5,6,7]
    >>> for i in range(0, len(digits), 2):
    ...      digits[i] = digits[i]*3
    ... 
    >>> digits
    [3, 2, 9, 4, 15, 6, 21]
    

只是为了演示 Python 切片和列表理解:

>>> L = [1,2,3,4,5,6,7]
>>> L[::2] = [x*3 for x in L[::2]]
>>> L
[3, 2, 9, 4, 15, 6, 21]

Select 用 L[::2] = 替换每隔一个字符,然后使用列表理解将列表中的每个条目增加三倍。