2015-11-07 45 views
1

我想將數組的某些值乘以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]

+0

你的情況到底發生了什麼,就是你正在爲列表中的每個數字遍歷一次循環。你的列表中有7位數字,所以你的乘法每次處理7次。 – Joe

回答

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] 
    
    一步
+0

你爲什麼使用'枚舉'?爲什麼不只是'因爲我在範圍內(0,len(digits),2)'? – Paul

+0

@Paul Cheers補充道。非常感謝。 –

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] =,然後使用列表理解來將列表中的每個條目加倍。