【问题标题】:Adding items in a nested list?在嵌套列表中添加项目?
【发布时间】:2017-04-04 21:49:59
【问题描述】:

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

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 一开始? “i”不应该是列表的元素吗?我认为这就是运行 for 循环时会发生的情况。与 j 相同。另外, i 和 j 属于什么?我一直在看这段代码几个小时并搜索视频,似乎找不到对此的解释。如果有人可以为我解释这段代码的元素,那真的会很有帮助。谢谢。

【问题讨论】:

  • 您应该将这些问题直接发给编写此代码的人。
  • FWIW,我会用for sublist in List1: for item in sublist: total += item 替换那些循环。你现在所拥有的,for i in range(len(...)),是一种代码味道。在这种情况下调用range() 通常是不必要的。
  • 或者official Python2 tutorial,因为你使用的是Python2。
  • 使用调试器,或 print 语句用于代码中您不理解的点处的变量通常会有所帮助..

标签: python list loops


【解决方案1】:

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

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

for elem in list1:
    # work with elem

这两种方法都可以,这取决于在处理每个元素时是否需要知道它的索引。

【讨论】:

    【解决方案2】:
    for i in range(0, len(list1)):
    

    使i 成为range() 的结果,它给出了从第一个到最后一个数字的列表,但不包括最后一个。

    ij 是这些列表的索引。它将其视为一个数组,这通常是 Python 新手尝试应用他们的旧语言技能的保留,其中 ij 将代表二维数组中的 xy 值。

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

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

    甚至

    total = sum(map(sum, list1))
    

    【讨论】:

    • 不要称它为list,否则你会掩盖内置的。此外,sum(map(sum, lst)) 会更短也更快。
    • @TigerhawkT3 好点。我将其更正为 OP 使用的 list1
    【解决方案3】:

    为什么 i= 0 开头? “i”不应该是列表的元素吗?

    语句for i in range(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] 的长度)外循环。 ij 的组合用于索引存储在嵌套列表中的实际数字。

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

    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
    

    【讨论】:

    • 好的,我明白了。但是你能解释一下 total=0 的作用吗?谢谢
    • total = 0 创建一个名为 total 的变量并将其值初始化为 0。这意味着在您进入 for 循环并开始在列表中添加条目之前,total 的值是 0。
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2021-02-27
    相关资源
    最近更新 更多