我最近开始学习 python,但我被困在某个地方看到的这个问题中。
输入将是一个数字n,后跟n 个数字的列表。我必须生成不同的组合元组,每次消除一个元素:
输入:
4
1 2 3 4
预期输出:
[(1,),(2,3,4)]
[(1,2),(3,4)]
[(1,2,3),(4,)]
[(1,2,3,4)]
正如您所看到的,元组中的一个元素在每个序列中都出现了。
这是我尝试过的:
n=int(input())
my_num=[]
my_list=[]
my_num=input().split(" ")
my_num=list(map(int,my_num))
for i in my_num:
temp_num=list(itertools.combinations(my_num,i))
my_list.append(temp_num)
这是我得到的:
[(1,), (2,), (3,), (4,)]
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
[(1, 2, 3, 4)]
现在我不得不手动选择元素,这显然是不允许的。 我知道我必须对每个列表中的最后一个元素做一些事情,但无法弄清楚。请帮忙!谢谢!
还有如何引用特定元素,例如如果我只需要在上面生成的第一个列表中打印 (2,3,4) 会怎样。如何引用?
请您参考如下方法:
您可以在输入列表的长度范围内迭代索引,并相应地在索引处对列表进行切片。预期输出中的最后一个列表不需要切片并且只有一个元组(而不是之前列表中的两个)所以你可以直接 yield 它:
def slices(l):
for i in range(1, len(l)):
yield [tuple(l[:i]), tuple(l[i:])]
yield [tuple(l)]
这样:
list(slices([1, 2, 3, 4]))
返回:
[[(1,), (2, 3, 4)], [(1, 2), (3, 4)], [(1, 2, 3), (4,)], [(1, 2, 3, 4)]]
