我试图将数组的某些值乘以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 :(得分: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] =
选择替换其他每个字符,然后使用列表推导将列表中的每个条目加倍。