python为什么空列表创建在for循环中没有range和len函数的情况下无法工作



下面的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上。

列表内容可以是任何对象,其中列表索引总是基于零的索引:从0len(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

相关内容

  • 没有找到相关文章

最新更新