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

比较嵌套列表中的值

  •  1
  • SpaceBallz  · 技术社区  · 2 年前

    我已经查过了,找不到最简单的答案。

    我在python中有一个嵌套的项目列表。

    [['screens\\achieve.png', 378, 40, 194, 198, 234],
     ['screens\\test.png', 378, 40, 1, 8, 15],
     ['screens\\cutout.png', 378, 40, 4, 8, 14],
     ['screens\\sample.png', 378, 40, 1, 6, 12]]
    

    这些是图片中的像素颜色,我在列表中有大约60张图片,这是一个剪贴画。 图像名称、x坐标、y坐标、红色、绿色、蓝色值

    我的工具所做的是显示图像。我点击图像中的一个位置,它会在满是图像的文件夹中循环,并在我在查看的图像中点击的位置输出颜色值。

    现在我想做的是查看颜色值列表,看看列表中是否有其他图像在同一位置具有相同的颜色。

    我知道我在查记录。从上面的片段中,让我们假设im查看测试。清单中的png(第[1]项)。我需要遍历列表中的其他项,以查看我在测试中单击的位置是否正确。png在颜色上与其他任何物品都是独一无二的。

    提前谢谢。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Andrej Kesely    2 年前

    如果我理解正确,您需要对照所有其他图像检查特定索引处图像的颜色:

    lst = [
        ["screens\\achieve.png", 378, 40, 194, 198, 234],
        ["screens\\test.png", 378, 40, 1, 8, 15],
        ["screens\\cutout.png", 378, 40, 4, 8, 14],
        ["screens\\sample.png", 378, 40, 1, 6, 12],
    ]
    
    
    def check(lst, test_idx):
        *_, r, g, b = lst[test_idx]
    
        return any(
            (r, g, b) == (tr, tg, tb)
            for i, (*_, tr, tg, tb) in enumerate(lst)
            if i != test_idx
        )
    
    
    print(check(lst, 1))
    

    印刷品:

    False
    

    如果列表为:

    lst = [
        ["screens\\achieve.png", 378, 40, 1, 8, 15],
        ["screens\\test.png", 378, 40, 1, 8, 15],
    ]
    

    然后:

    print(check(lst, 1))
    

    印刷品:

    True