整数乘以错误的数字

时间:2015-11-07 15:57:42

标签: python integer

我试图将数组的某些值乘以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]

2 个答案:

答案 0 :(得分:2)

你每次都会倍增它,因此大数字!循环每次将值乘以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,它将返回索引和值的元组。

  • 或者您甚至可以使用步长为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]
    

答案 1 :(得分:1)

只是为了演示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]

使用L[::2] =选择替换其他每个字符,然后使用列表推导将列表中的每个条目加倍。