如何从不同列表中识别 3 层组合

时间:2021-03-02 11:48:54

标签: python arrays list image

我有两个不同的图像数据集列表(list1 和 list2)。考虑到两个列表的集成,我想确定可能的三个特征组合,但不是单独确定。 list1 是主数据集,list2 是辅助数据。我已经熟悉 itertools.combinations 但我不知道如何解决当前的问题。任何人都可以在python中提出解决方案吗?

list1= ["a","b","c","d","e"]

list2= ["a1", "a2","a3","a4",
        "a5","a6","a7","a8",
        "a9","a10","a11","a12"]

五种可能组合的示例:

combinations=[('a', 'a1', 'a2'), ('a', 'b', 'a2'), ('b', 'a1', 'a2'), ('b', 'c', 'a3'), ('a', 'a2', 'a3')]

我针对两个小列表测试了提议的解决方案,这会在某些组合中产生重复的成员。

list1= ['a','b','c','d','e']
list2= ['a1', 'a2']

结果:

{('d', 'c', 'a2'), ('c', 'a2', 'a1'), ('e', 'b', 'a1'), ('c', 'd', 'a1'), ('e', 'a2', 'a1'), ('a', 'a', 'a2'), ('b', 'a2', 'a1'), ('d', 'd', 'a1'), ('d', 'a', 'a2'), ('a', 'b', 'a2'), ('a', 'e', 'a2'), ('e', 'a1', 'a1'), ('d', 'e', 'a2'), ('c', 'a', 'a2'), ('c', 'c', 'a2'), ('c', 'e', 'a2'), ('b', 'd', 'a1'), ('a', 'c', 'a1'), ('e', 'd', 'a1'), ('d', 'b', 'a2'), ('e', 'c', 'a2'), ('d', 'c', 'a1'), ('b', 'c', 'a2'), ('b', 'e', 'a2'), ('c', 'b', 'a2'), ('a', 'a', 'a1'), ('a', 'a1', 'a2'), ('d', 'a', 'a1'), ('a', 'e', 'a1'), ('a', 'b', 'a1'), ('b', 'a', 'a2'), ('d', 'a1', 'a2'), ('d', 'e', 'a1'), ('e', 'e', 'a2'), ('a', 'a2', 'a2'), ('c', 'a', 'a1'), ('c', 'c', 'a1'), ('a', 'd', 'a2'), ('d', 'a2', 'a2'), ('c', 'a1', 'a2'), ('c', 'e', 'a1'), ('b', 'a1', 'a1'), ('d', 'b', 'a1'), ('e', 'a', 'a2'), ('e', 'c', 'a1'), ('b', 'b', 'a2'), ('b', 'a1', 'a2'), ('b', 'c', 'a1'), ('e', 'b', 'a2'), ('c', 'a2', 'a2'), ('c', 'd', 'a2'), ('b', 'e', 'a1'), ('c', 'b', 'a1'), ('e', 'a2', 'a2'), ('a', 'a1', 'a1'), ('d', 'd', 'a2'), ('b', 'a2', 'a2'), ('b', 'a', 'a1'), ('e', 'a1', 'a2'), ('d', 'a1', 'a1'), ('e', 'e', 'a1'), ('a', 'a2', 'a1'), ('a', 'd', 'a1'), ('e', 'd', 'a2'), ('d', 'a2', 'a1'), ('c', 'a1', 'a1'), ('b', 'd', 'a2'), ('a', 'c', 'a2'), ('e', 'a', 'a1'), ('b', 'b', 'a1')}

重复示例:('c', 'a1', 'a1')

2 个答案:

答案 0 :(得分:0)

我不确定您到底想要什么,但是如果您想根据第一个列表中的输入合并两个列表,我建议您使用字典。您可以将 list1 中的元素作为键,将 list2 中的两个元素放入列表中,即该键的值。然后,您可以使用字典方法来更新这些值列表。

答案 1 :(得分:0)

收集所需的所有信息后,我建议的解决方案是改用 product

from itertools import product

def apply_op(list1, list2):
   part_1 = product(list1, list1, list2)
   part_2 = product(list1, list2, list2)
   return set(list(part_1)).union(set(list(part_2)))

print(apply_op(A, B))

编辑:上述解决方案不起作用,因为结果在元组中包含重复的成员。

def apply_op(list1, list2):
    ret = []
    for i in range(len(list1)):
        for j in range(i + 1, len(list1)):
            for k in range(len(list2)):
                ret.append((list1[i], list1[j], list2[k]))
    for i in range(len(list1)):
        for j in range(len(list2)):
            for k in range(j + 1, len(list2)):
                ret.append((list1[i], list2[j], list2[k]))
    return ret

print(apply_op(A, B))