Python:For 循环不起作用

问题描述 投票:0回答:3

为什么 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

我哪里出错了?

python list for-loop pass-by-reference
3个回答
4
投票

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
指向新生成的列表而不是旧列表。


2
投票

这是因为 len(x) 只是一个整数,你需要创建一个列表,例如

l=[1,2,3,4,5]
def times(x):
    for i in range(len(x)):
        x[i]+=10
times(l)
print l

0
投票

如果您希望列表中的所有数字都增加 10,那么只需排除长度并执行以下操作:

def times(x):
   for i in x:
      x = x + 10
© www.soinside.com 2019 - 2024. All rights reserved.