Skip to main content
 首页 » 编程设计

python之在python中生成不同维度的元组

2025年05月04日11jirigala

我最近开始学习 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)]]