Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会得到一个';列表索引超出范围';以下代码使用for循环时出错:_Python_Python 3.x - Fatal编程技术网

Python 为什么我会得到一个';列表索引超出范围';以下代码使用for循环时出错:

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,编写一个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)
运行此代码时,我得到一个错误:

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,但我仍然不明白为什么它会产生错误。我想我知道你认为发生了什么,为什么没有。我已经编辑了我的答案。