Python 为什么我会得到一个';列表索引超出范围';以下代码使用for循环时出错:
问题陈述:给定一个由一组整数组成的嵌套列表nl,编写一个python脚本来查找子列表的备用元素之和Python 为什么我会得到一个';列表索引超出范围';以下代码使用for循环时出错:,python,python-3.x,Python,Python 3.x,问题陈述:给定一个由一组整数组成的嵌套列表nl,编写一个python脚本来查找子列表的备用元素之和 nl = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]] sum = 0 n = 0 j=[] for ele in nl: for i in ele: j.append(i) for a in j: sum = sum + j[n] n = n + 2 print(sum) 运行
nl = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
sum = 0
n = 0
j=[]
for ele in nl:
for i in ele:
j.append(i)
for a in j:
sum = sum + j[n]
n = n + 2
print(sum)
运行此代码时,我得到一个错误:
Traceback (most recent call last):
File "C:\Users\ARUDRAVA\Contacts\Desktop\lists Assigment\assigment2.py",line 14, in <module>
sum = sum + j[n]
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“C:\Users\ARUDRAVA\Contacts\Desktop\列出了Assigment\assigment2.py”,第14行,在
总和=总和+j[n]
索引器:列表索引超出范围
为什么会产生此错误?您的外部循环如下所示:
for ele in nl:
for i in ele:
j.append(i)
# inner loop.
第一次到达内部循环时,列表中只追加了一个元素j
。第二次到达内部循环时,两个元素被附加到j
,因此第二次到达循环时,j
是[1,2]
从您的评论看来,您认为当到达内部循环时,j
包含nl
中的所有12个数字。那是不对的。也许你的意思是“内部循环”在两个外部循环之后,而不是在它们内部
让我们第二次到达内部循环j=[1,2]
,假设n=0
(它可能比这个大,但不能小)
让我们检查一下内部循环
for a in j:
sum = sum + j[n]
n = n + 2
因为j有两个元素,它将循环两次:
第一次通过循环时,它将j[0]
相加,并设置n=0+2
第二次通过循环,它尝试将j[2]
添加到sum,sum是一个索引器
您需要重新思考程序的逻辑。祝你好运 在Python中通常是这样做的:
nl = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
total = sum(number for sublist in nl for number in sublist)
不要命名变量sum
——这会“隐藏”内置函数。实际上,这正是您需要的功能
无论如何,代码中的错误在这里:
sum = sum + j[n]
应该是:
sum = sum + a
这些是清单,不是字典。将元素与其索引混淆。将
sum=sum+j[n]
更改为sum=sum+a
。您根本不需要n
。但是如果没有n,它只会添加所有元素,而不是仅添加备用元素,对吗?但是,对于长度为2的列表j,获取备用元素的总和是没有意义的,对吗?但是对于给定的12个元素的列表j,但我仍然不明白为什么它会产生错误。我想我知道你认为发生了什么,为什么没有。我已经编辑了我的答案。