gpt4 book ai didi

python - 如何从多个设置值到达一个产品 - Python

转载 作者:太空狗 更新时间:2023-10-30 02:52:34 25 4
gpt4 key购买 nike

我有 3 组:

A = [0, 10, 20]
B = [5, 10, 15]
C = [2, 5]

我正在运行以下列表理解以了解笛卡尔乘积如何匹配目标值 40。

from itertools import product

xx = [p for p in (product(A, B, C)) if sum(p) == 40]

print(list(xx))

给出结果

[(20, 15, 5)]

以上结果是从每组中抽取1个图形来完成目标值。我想从 A 和 B 中提取 2 个数字,并从 C 中提取 1 个数字以获得这个结果。我怎样才能改变我的解决方案以获得如下结果:

[(0, 20, 5, 10, 5]

最佳答案

如何考虑 A x A x B x B x C 的笛卡尔积?

xx = [list(p) for p in product(A, A, B, B, C) if sum(p) == 40 and p[0] != p[1] and p[2] != p[3]]
print(xx)

这给了我们

[[0, 10, 10, 15, 5], [0, 10, 15, 10, 5], [0, 20, 5, 10, 5], [0, 20, 10, 5, 5],
[10, 0, 10, 15, 5], [10, 0, 15, 10, 5], [20, 0, 5, 10, 5], [20, 0, 10, 5, 5]]

如果您不想考虑对从 AB 中选择的 2 个元素进行排序,您可以对它们的“选择”进行排序并构造一个 最终结果的集合:

xx_unique = set([tuple(sorted(p[:2]) + sorted(p[2:4]) + p[4:]) for p in xx])
print(xx_unique)
# {(0, 10, 10, 15, 5), (0, 20, 5, 10, 5)}

注意:正如@MadPhysicist 所指出的,如果您的列表中有重复项,您可能需要首先考虑索引的乘积,然后重建您想要的 5 元组:

xxi = [p for p in product(range(len(A)), range(len(A)), range(len(B)), range(len(B)), range(len(C))) if p[0] != p[1] and p[2] != p[3]]

xx = [ [A[i], A[j], B[k], B[l], C[m]] for i, j, k, l, m in xxi if sum([A[i], A[j], B[k], B[l], C[m]]) == 40 ]

关于python - 如何从多个设置值到达一个产品 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52901864/

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