如何在元组中复制元素 n 次

问题描述

我想得到一个由 n 个元组组成的元组,但我不知道如何去做。

从这个 ([1,25,30],'a') 我尝试了这个 ([1,'a')*3 但它不起作用。

基本上我想得到这样的反馈:

Out[29]: 
(([1,'a'),([1,'a'))

解决方法

在“乘法”之前,您必须将元组包装成另一个单元素元组:

>>> ([1,25,30],'a') * 3
([1,'a',[1,'a')
>>> (([1,'a'),) * 3
(([1,([1,'a'))

但请记住,这将创建一个元组,其中包含 3 个对 相同 元组的引用。对于纯的、不可修改的元组,这很好,但你的元组有可变部分,如果修改,将在所有“不同”引用中修改。

>>> t = (([1,) * 3
>>> t[0][0][1] = 42
>>> t
(([1,42,'a'))

如果您不想要这样,最好将 tuple 与生成器表达式一起使用:

>>> t = tuple( ([1,'a') for _ in range(3))
>>> t[0][0][1] = 42
>>> t
(([1,'a'))
,

外括号只是分组括号。您需要添加一个逗号以使外壳成为元组:

t = (([1,) * 3
print(t)

# Output
# (([1,'a'))
,
import pprint
tt = (([1,)*8
pprint.pprint(tt)

输出:

(([1,'a'))

但请记住,这些都是对同一个对象的引用!

tt[0][0][0] = 2 # this will change the first list item in all tuples!
pprint.pprint(tt)

输出:

(([2,([2,'a'))

见:List of lists changes reflected across sublists unexpectedly