gpt4 book ai didi

Python:组合来自 4 个列表的元素并跳过其中有重复项的列表组合

转载 作者:行者123 更新时间:2023-12-03 22:58:29 25 4
gpt4 key购买 nike

我有点失落...
我有以下数据集作为输入(通常是一个类别,现在简化为三个类别):

category = 
{"A" :[1002, 1004,1003,1008],
"B": [1002, 1004,1009],
"C":[1002,1003,1006,1005]}
作为输出,我希望元素的所有可能组合都受到限制,即如果元素不在其他类别中,则仅进行组合。例如,1002 属于所有类别,因此无法进行组合。 1004 在 A 和 B 中,因此它可以与来自 C 的元素组合,该元素在 A 和 B 中没有重复或没有重复等等。
此示例的输出应为:
Out: [[1002],[1003],[1008],[1009],[1004], [1006],[1006,1008,1009],[1005,1008,1009],[1003,1009][1005,1008],[1004,1005],[1008,1006],[1009,1008],[1005,1009]]
*我希望我没有忘记任何组合请让我知道我会更新
也许有人可以帮助我,
我现在已经尝试了几个小时来首先组合所有元素,对输出进行排序并删除列表和子列表中的重复项。但是现在我不知道如何进一步过滤掉我仍然“错误的组合”。所以我想这是错误的方式......
那是我的开始....
def get_list_of_lists(list_of_tuples):
list_of_lists = []
for tuple in list_of_tuples:
list_of_lists.append(list(tuple))

return list_of_lists

def rem_dup(lis):
y, s = [], set()
for t in lis:
w = tuple(sorted(t)) if isinstance(t, list) else t
if not w in s:
y.append(t)
s.add(w)
return y


category = {"A" :[3001,1002,1001,8002,2002], "B": [4002,7001,3001,1002,2002], "C":[4002,4001,1002,5001], "D":[4001,1002,1001,2002]}
s = [category["A"], category["B"], category["C"], category["D"]]
s1=list(itertools.product(*s))
s2 = get_list_of_lists(s1)
for sublists in s2:
sublists.sort()
inp = s2
out = [rem_dup(i) if isinstance(i, list) else i for i in rem_dup(inp)]
new_out = []
for part in out:
if part not in new_out:
new_out.append(part)
out = new_out

最佳答案

您可以使用 itertools.product获取所有选项的笛卡尔产品,然后将其减少为非重复的产品:

>>> import itertools
>>> list(map(set,itertools.product(*category.values())))

[{1002}, {1002, 1003}, {1002, 1006}, ..., {1008, 1009, 1005}]
为了进一步删除元素,由于组中有 2 个或更多相同元素而重复,例如 {1002, 1004, 1003}{1004, 1002, 1003} :
>>> import numpy as np
>>> np.unique(list(map(lambda y: list(set(sorted(y))),itertools.product(*category.values()))))
array([list([1002]), list([1002, 1003]), ...,
list([1009, 1004, 1006])], dtype=object)

关于Python:组合来自 4 个列表的元素并跳过其中有重复项的列表组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68072816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com