代码之家  ›  专栏  ›  技术社区  ›  devman3211

在Python中遍历列表列表列表

  •  2
  • devman3211  · 技术社区  · 2 年前

    我正在尝试用python迭代一个3-D列表(不是numpy,但如果这样做更容易的话,我愿意转换成numpy数组),从这样的列表中:

    a = [[[0, 0], [3, 0]], [[1, 0], [4, 0]], [[2, 0], [6, 0]] ]
    

    我可以得到输出

    [0,0]
    [1,0]
    [2,0]
    [3,0]
    [4,0]
    [6,0]
    
    

    我不知道如何让它像这样迭代。。。

    我的代码:

    a = [[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[2, 0], [0, 0]] ]
    for i in range(len(a)):
        for z in range(len(a[i])):
            print(a[i][z])
    

    我尝试过不同的方法,但似乎无法得到这个输出。

    4 回复  |  直到 2 年前
        1
  •  3
  •   enke    2 年前

    我认为您需要从每个子列表中连续打印第n个子列表。你可以打开行李拉上拉链 a 要获得元组的iterable,请打印其中的每一对:

    for tpl in zip(*a):
        for pair in tpl:
            print(pair)
            
    

    输出:

    [0, 0]
    [1, 0]
    [2, 0]
    [3, 0]
    [4, 0]
    [6, 0]
    
        2
  •  3
  •   Andrej Kesely    2 年前

    尝试:

    print(*[i for v in zip(*a) for i in v], sep="\n")
    

    印刷品:

    [0, 0]
    [1, 0]
    [2, 0]
    [3, 0]
    [4, 0]
    [6, 0]
    
        3
  •  1
  •   XXX    2 年前

    如果只想按列遍历元素,可以将列表转换为numpy数组,然后堆叠列并打印:

    import numpy as np
    a = [[[0, 0], [3, 0]], [[1, 0], [4, 0]], [[2, 0], [6, 0]] ]
    arr = np.stack(np.array(a), axis=1)
    
    for p in arr:
        for x in p:
            print(x)
    

    下面的解决方案基于之前的假设,即根据排序顺序打印子列表中的每个项目: 可以使用itertools将三维列表展平为二维列表,然后根据每个子列表中的第一个元素对二维列表进行排序。然后打印排序后的列表。

    import itertools
    a = [[[0, 0], [3, 0]],[[1, 0], [4, 0]],[[2, 0], [6, 0]]]
    flat_list = list(itertools.chain(*a))
    sorted_list = sorted(flat_list, key=lambda x: x[0])
    
    for i in sorted_list:
        print(i)
    
        4
  •  0
  •   lemon    2 年前

    这是一种正确的迭代方式,就像你正在尝试的那样:

    a = [[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[2, 0], [0, 0]] ]
    for i in range(len(a)):
        for z in range(len(a[i])):
            print((a[i])[z])
    

    如果对您来说更简单,请尝试迭代列表中的元素,而不是使用索引来迭代列表的长度:

    a = [[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[2, 0], [0, 0]] ]
    for a1 in a:
        for a2 in a1:
            print(a2)