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

访问嵌入列表的相同索引

  •  2
  • Adam_G  · 技术社区  · 6 年前

    我有一张图像编码如下: image[RGBchannel][y][x]

    我想访问 RGBchannel 每个指数三倍。这就是我目前使用的方法。有没有更有效的方法来写呢?

    image = [[[1, 2, 3], [4,5,6]], [[7,8,9], [10, 11, 12]], [[13,14,15], [16,17,18]]]
    
    for y in range(len(image[0]):
        for x in range(len(image[0][0]):
            rgb = []
            for channel in range(len(image)):
                rgb.append(image[channel][y][x])
            print rgb
    

    输出为:

    [1, 7, 13]
    [2, 8, 14]
    [3, 9, 15]
    [4, 10, 16]
    [5, 11, 17]
    [6, 12, 18]
    

    在不导入任何第三方库或导入任何内部模块的情况下,有更好的方法吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   javidcf    6 年前

    那么这个呢:

    image = [[[1, 2, 3], [4,5,6]], [[7,8,9], [10, 11, 12]], [[13,14,15], [16,17,18]]]
    result = [x for z in zip(*image) for x in zip(*z)]
    print(result)
    

    输出:

    [(1, 7, 13), (2, 8, 14), (3, 9, 15), (4, 10, 16), (5, 11, 17), (6, 12, 18)]
    
        2
  •  2
  •   hilberts_drinking_problem    6 年前

    这里有一个类似的方法,可以拉两次拉链。

    image = [
        [[1, 2, 3], [4, 5, 6]],
        [[7, 8, 9], [10, 11, 12]],
        [[13, 14, 15], [16, 17, 18]],
    ]
    
    image_TT = [[*x] for z in zip(*map(zip, *image)) for x in z]
    # [[1, 7, 13], [4, 10, 16], [2, 8, 14], [5, 11, 17], [3, 9, 15], [6, 12, 18]]
    in_order = image_TT[::2] + image_TT[1::2]
    # [[1, 7, 13], [2, 8, 14], [3, 9, 15], [4, 10, 16], [5, 11, 17], [6, 12, 18]]