我有两个不同的图像数据集列表(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')
答案 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))