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。