对于 (1, 13) 范围内的整数,我需要构建总和为 13 的三个整数的所有可能变体。变体不应重复。例如 (1,2,10), (2,1,10), (10,1,2) 和 (10,2,1) 都是一个变体的重复。因此结果列表应该只有这个元组之一,与哪一个无关。在结果元组中的不同位置具有相同整数的变体(如 (1,1,11))也是有效的。对于这些变体,重复将如 (1,1,11)、(1,11,1) 和 (11,1,1)。
为了更好地解释这里的问题,这是它来自的故事:
艾伦和德雷克的两个朋友见面了。
艾伦:我有三个孩子。
德雷克:他们几岁了?
艾伦:孩子们的年龄总和等于 13。
所以我试图获得所有可能年龄的列表。
我有这个代码,它生成我需要删除的所有可能的重复:
ages = list(range(1,13))
kids_ages = []
for a in ages:
for b in ages:
for c in ages:
if a + b + c == 13:
kids_ages.append((a,b,c))
结果我得到:
([(1, 1, 11),
(1, 2, 10),
(1, 3, 9),
(1, 4, 8),
(1, 5, 7),
(1, 6, 6),
(1, 7, 5),
(1, 8, 4),
(1, 9, 3),
(1, 10, 2),
(1, 11, 1),
(2, 1, 10),
(2, 2, 9),
(2, 3, 8),
...
如何摆脱重复?
尝试:
import itertools
res=list(sorted(el) for el in itertools.combinations_with_replacement(range(1, 14), 3) if sum(el)==13)
print(res)
输出:
[[1, 1, 11], [1, 2, 10], [1, 3, 9], [1, 4, 8], [1, 5, 7], [1, 6, 6], [2, 2, 9], [2, 3, 8], [2, 4, 7], [2, 5, 6], [3, 3, 7], [3, 4, 6], [3, 5, 5], [4, 4, 5]]
[Program finished]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句