2016-12-01 43 views
1

我有一个数字列表t。我想用10乘以该列表中的号码为什么这个不行?:乘以10的数字列表

for i in t 
    i = i*10 

我为什么要做这个?:

for i in range(len(t)): 
    t[i] = t[i]*10 
+1

你是从每次循环迭代列表覆盖每个号码的副本。在这种情况下不会修改初始列表 – RomanPerekhrest

+0

[如何将列表中的所有整数相乘]可能的重复(http://stackoverflow.com/questions/26446338/how-to-multiply-all-integers-inside-list ) – RomanPerekhrest

回答

1

好了,这是行不通的,因为这不是正确的语法。然而,你可以通过列表理解清理一些东西:

t = [x * 10 for x in t] 
0

它在Python中不起作用。

for .. in构造的索引变量(您的i)只是一个变量。在每次循环开始时,Python将in序列中的相应值分配给循环的索引变量。就好像您有很多循环体的副本,并且在每个副本之前,您都会输入一个赋值语句i = t[0]i = t[1]等等。索引变量不记得它是从in序列(您的t)分配的。索引变量不是in序列的相应值的等效名称(“别名”)。更改索引变量不会影响in序列。

python -c 't = [1, 2, 3] 
for i in t: 
    i = 1 
print t' 
[1, 2, 3] 

但是你不知道它是否是别名!是经常使用Python相比,另一种语言做工作的方式(报价手册“perlsyn”):

如果列表的任何元素是左值,你可以通过修改环路内VAR修改。相反,如果LIST的任何元素不是左值,则任何修改该元素的尝试都将失败。换句话说,foreach循环索引变量是您正在循环的列表中每个项目的隐式别名。

所以:

perl -e '@t = (1, 2, 3); foreach $i (@t) { $i = 1; } print @t' 
111