【发布时间】:2020-01-16 05:00:14
【问题描述】:
我想为从 1 到 k 的最多 k 个子序列的组合键入代码。在这里,我试图找到两次不包含相同数字的子序列,即使列表包含。
我正在尝试这样做,但我在第一部分失败了。
import itertools
lst1=[1, 2, 3, 5, 6, 3, 9, 5, 1, 2]
k = int(input())
lst = [i for j in range(1,k+1) for i in itertools.combinations(lst1, j)]
set1 = set(lst)
print(lst)
print(set1)
代码应该给出如下答案: [(1,2,3), (1,3,5),...] 但它不应该给出 (1,2,1) 或 (1,2,2),因为它包含重复的数字。
【问题讨论】:
-
欢迎来到 SO!你能更精确地了解你想要的输出吗?我有点困惑,因为您的输出不是以空列表开头,后跟
(1,)等元组。但是,本能地,为什么不使用set(lst1)并将其传递给combinations?感谢您的澄清。 -
是的,我很抱歉。我的列表确实从元组中的 1 个元素开始,而不是 2 个元素,但是当它出现 2 个元素时,我不希望像 (1, 1) 等相同的元素出现......如果它适用三个元素我不希望任何形式的重复元素,如 (1,2,1) 或 (1,1,2),它不应该出现在列表中。谢谢@ggorlen
-
我使用集合升级了我的代码,但它仍然在列表中给出重复元素,如 (1,2,2)。 @ggorlen
-
您可以逐字发布所需的输出吗?我仍然在猜测精确的输出应该是什么。谢谢。
-
如果我的列表是 [1, 1, 2, 2, 3],我的输出应该包含... (1,2); (1,2); (1,3); (1,2); (1,2); (1,3); (2,3); (2,3); (1,2,3); (1,2,3); (1,2,3); (1,2,3) ------ 这里我的输出忽略了所有的 (1,1); (2,2);或 (2,2,3).... 它没有必要它应该是元组,它也可以是列表形式。 @ggorlen
标签: python python-3.x python-2.7 list