为什么 for 循环不起作用?
l=[1,2,3,4,5]
def times(x):
for i in len(x):
x[i]+=10
times(l)
print l
理想情况下,它应该打印列表中增加 10 的元素。但它给了我以下错误:
Traceback (most recent call last):
File "ex1.py", line 5, in <module>
times(l)
File "ex1.py", line 3, in times
for i in len(x):
TypeError: 'int' object is not iterable
我哪里出错了?
len
函数将仅返回列表的长度。它只是一个数字,因此您无法使用 for
循环对其进行迭代。
xrange
函数以及 len(x)
for i in xrange(len(x)):
我们在这里使用
xrange
函数,因为range
函数会在迭代之前在内存中创建整个列表。例如,
print range(10)
将为您提供新构建的列表,其中包含从 0 到 9 的元素。考虑迭代一个非常大的列表。假设列表的大小是 10000000。仅仅为了迭代而生成从 0 到 10000000 的数字确实很浪费内存,对吧?这就是为什么我们使用
xrange
。
xrange
返回一个可迭代对象,在迭代时一次给出一个数字。它的内存效率非常高,因为我们不必构建整个列表。
建议:除非绝对有必要修改原始列表,否则可以创建一个新列表并将其返回。
def 次(my_list,my_num = 10): 返回 [current_num + my_num for current_num in my_list]
l = [1,2,3,4,5] l = 次(l) 打印l
它会对数据产生与第一个相同的效果。但是我们使用列表理解来创建一个新列表,并将其分配给变量
l
。所以,现在 l
指向新生成的列表而不是旧列表。
这是因为 len(x) 只是一个整数,你需要创建一个列表,例如
l=[1,2,3,4,5]
def times(x):
for i in range(len(x)):
x[i]+=10
times(l)
print l
如果您希望列表中的所有数字都增加 10,那么只需排除长度并执行以下操作:
def times(x):
for i in x:
x = x + 10