下面的python代码运行良好:
my_list = [10, 1, 8, 3, 5]
total = 0
for i in my_list: # list without range and len function
total += i
print(total)
但下面的修订代码在不使用range和len函数的情况下无法用于循环,为什么?
my_list = []
total = 0
lower_range = 1
upper_range = 11
for i in range(lower_range,upper_range):
my_list.append(4*i)
print(my_list)
print(len(my_list))
for i in my_list: # Error is giving index out of range**
total = total + my_list[i]
print(total)
但是,如果我按照下面的方式重写,它可以正常工作:
for i in range(len(my_list)):
total = total + my_list[i]
问题是,为什么在这种情况下,不使用range((和len(for循环对列表不起作用?
它显示list index out of range
,因为i=40,列表应该有41个项目才能工作。由于列表中的项目少于显示错误的项目
所以你需要添加len,因为len是列表的长度,等于列表中的项目。
for i in my_list: # Error is giving index out of range**
total = total + my_list[i]
在这个for循环中,我表示List中的一个对象。不是索引。
它在你的重写中被解决了,因为我现在代表一个索引。
为什么?当你遍历这样的列表时
for i in [100,200,300]:
print(i)
你将得到输出CCD_ 2。因此,不能使用i
为列表编制索引。mylist[300]
。所以在你的例子中,我假设你只想把所有的数字加到total
上。
for i in my_list: # Error is NOT giving index out of range
total += i
执行此操作时:
for i in my_list: # Error is giving index out of range**
total = total + my_list[i]
您正在对列表的内容进行迭代,而不是对其索引进行迭代,因此i
将被分配值:[4, 8, 12, 16, 20, 24, 28, 32, 36, 40]
,当您的列表从0到9进行索引时,您将获得超出此范围的值的index out of range
。你的案子发生在12
上。
列表内容可以是任何对象,其中列表索引总是基于零的索引:从0
到len(my_list)-1
。
如果将列表内容设置为字符串而不是整数,它可能会变得更加清晰。此外,模式range(len(my_list))
非常常见,python为此有一个特殊的函数:enumerate()
,它允许您对列表索引和的值进行迭代。
重写您的示例:
my_list = []
total = ''
lower_range = 0
upper_range = 10
for i in range(lower_range, upper_range):
my_list.append(chr(ord('A')+i))
print('my_list:', my_list)
print('length of my_list:', len(my_list))
for value in my_list:
print('value:', value)
for i, value in enumerate(my_list):
print(f"Item index <{i}> has value {value!r}")
total = total + my_list[i]
print('total:', total)
输出:
my_list: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
length of my_list: 10
value: A
value: B
value: C
value: D
value: E
value: F
value: G
value: H
value: I
value: J
Item index <0> has value 'A'
Item index <1> has value 'B'
Item index <2> has value 'C'
Item index <3> has value 'D'
Item index <4> has value 'E'
Item index <5> has value 'F'
Item index <6> has value 'G'
Item index <7> has value 'H'
Item index <8> has value 'I'
Item index <9> has value 'J'
total: ABCDEFGHIJ