Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 是否在嵌套列表中添加项?_Python_List_Loops - Fatal编程技术网

Python 是否在嵌套列表中添加项?

Python 是否在嵌套列表中添加项?,python,list,loops,Python,List,Loops,我有以下代码用于在嵌套列表中添加项目: list1 = [[1, 2, 3],[4, 5, 6]] total = 0 for i in range(0, len(list1)): print 'len(list1)', len(list1) print 'i=', i for j in range(0, len(list1[i])): print 'j=', j print 'list1i', list1[i] total

我有以下代码用于在嵌套列表中添加项目:

list1 = [[1, 2, 3],[4, 5, 6]]
total = 0
for i in range(0, len(list1)):
    print 'len(list1)', len(list1)
    print 'i=', i
    for j in range(0, len(list1[i])):
        print 'j=', j
        print 'list1i', list1[i]
        total += list1[i][j]
        print 'sub-total=', total

print 'Final Total:', total
实施后,将运行:

len(list1) 2
i= 0
j- 0
list1i [1, 2, 3]
sub-total= 1
j- 1
list1i [1, 2, 3]
sub-total= 3
j- 2
list1i [1, 2, 3]
sub-total= 6
len(list1) 2
i= 1
j- 0
list1i [4, 5, 6]
sub-total= 10
j- 1
list1i [4, 5, 6]
sub-total= 15
j- 2
list1i [4, 5, 6]
sub-total= 21
Final Total: 21

这很有效,但我不明白为什么。比如,为什么一开始i=0?“我”不应该是列表中的元素吗?我想当你运行for循环时就会发生这种情况。和j一样。还有,i和j属于什么?我已经看了几个小时的代码并搜索了视频,似乎找不到对此的解释。如果有人能为我解释一下这段代码的内容,那真的会很有帮助。谢谢。

i是主列表中的索引j是每个子列表的索引。索引和元素本身之间的区别是

for i in range(0, len(list1)):
    # work with list1[i]

for elem in list1:
    # work with elem
这两种方法都可以,具体取决于在处理每个元素时是否需要知道其索引

for i in range(0, len(list1)):
i
转换为的结果,该结果给出了从第一个到最后一个的数字列表,但不包括最后一个

i
j
是这些列表的索引。它将其视为一个数组,通常是Python新手试图应用其旧语言技能时留下的,其中
i
j
表示二维数组中的
x
y

相反,python中更好的方法是:

total = 0
for sublist in list1:
    total += sum(sublist)
甚至

total = sum(map(sum, list1))
为什么一开始i=0?“我”不应该是列表中的元素吗

语句
fori在范围(0,len(list1)):
i
设置为在外部for循环中从0增加到(1-列表长度)。
i
的值用作
list1
元素的索引

请注意,
list1
的长度为2,即它有两个元素,它们本身就是列表。第一个元素是
[1,2,3]
,第二个元素是
[4,5,6]

上述解释同样适用于
j
。在您提交的代码中,
j
在外循环的第一次迭代中从0增加到1-(长度
list1[0]
),在外循环的第二次迭代中从0增加到1-(长度
list1[1]
)。
i
j
的组合用于索引嵌套列表中存储的实际数字

从您的问题中,您似乎期望
i
j
的值引用列表中的实际元素。您可以这样做,但语法会略有不同,如下所示:

list1 = [[1, 2, 3],[4, 5, 6]]
total = 0
for i in list1:
    print 'i=', i
    for j in i:
        print 'j=', j
        total += j
        print 'sub-total=', total

print 'Final Total:', total

您应该将这些问题交给编写此代码的人。FWIW,对于列表1中的子列表,我会将这些循环替换为
:对于子列表中的项:total+=item
。您现在拥有的,
对于范围内的i(len(…)
,是一种代码气味。在该上下文中调用
range()
通常是不必要的。我建议使用.Or,因为您使用的是Python2。使用调试器,或
print
语句在代码中不理解的点处对变量进行处理通常会有帮助。不要调用它
list
,否则会屏蔽内置函数。而且,
sum(map(sum,lst))
会更短更快。@TigerhawkT3很好。我将它更正为OP使用的
list1
。好的,我明白了。但是你能解释一下total=0的作用吗?感谢
total=0
创建了一个名为total的变量,并将其值初始化为0。这意味着,在输入for循环并开始在列表中添加条目之前,total的值为0。