我真的不明白如何获得此代码的输出

时间:2017-04-07 13:50:04

标签: python list python-3.x sum

lst = [[2, 3, 4], [1, 1]]
sum = 0
for i in range(len(lst)):
    for j in range(len(lst)):
        sum += lst[i][j]
print(sum)

我是Python的新手,你能解释一下输出是7吗?

2 个答案:

答案 0 :(得分:2)

你的两个循环都超出了len(lst)的范围,而内部循环可能会在len(lst[i])的范围内循环。然而,对此的真正解决方法是不循环遍历range(len(...)),而是遍历元素:

for sub_list in lst:   # Loop over each list inside of lst
    for value in sub_list:  # Loop over each number in sub list
        sum += value

这样更干净,更不容易出现像你这样的错误,而且阅读效果更好。

答案 1 :(得分:1)

您的代码中可能存在错误

lst = [[2, 3, 4], [1, 1]]
sum = 0
for i in range(len(lst)):
    for j in range(len(lst)): # bug ?
        sum += lst[i][j]
print(sum)

这是什么意思? {/ strong> ij的范围将超过lst长度,即2。因此,您将查找组合(i,j)(0,0),(0,1),(1,0),(1,1)。因此忽略 (0,2) 。快速解决方案是:

lst = [[2, 3, 4], [1, 1]]
sum = 0
for i in range(len(lst)):
    for j in range(len(lst[i])):
        sum += lst[i][j]
print(sum)

然而,对集合使用for循环更优雅,更不容易出错:

lst = [[2, 3, 4], [1, 1]]
sum = 0
for row in lst:
    for element in row:
        sum += element
print(sum)

或者你可以使用sum(..)内置:

lst = [[2, 3, 4], [1, 1]]
the_sum = 0
for row in lst:
    the_sum += sum(row)
print(the_sum)