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

Python 如何在元组中复制元素n次,python,data-structures,tuples,Python,Data Structures,Tuples,我想得到n个元组中的一个元组,但我不知道该怎么做 从这个([1,25,30],'a')我尝试了这个 ([1,25,30],'a')*3,但它不起作用 基本上我想得到这样的反馈: Out[29]: (([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1

我想得到n个元组中的一个元组,但我不知道该怎么做

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

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

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

在“相乘”之前,您必须将该元组包装到另一个单元素元组中:

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

>>> t = (([1, 25, 30], 'a'),) * 3
>>> t[0][0][1] = 42
>>> t
(([1, 42, 30], 'a'), ([1, 42, 30], 'a'), ([1, 42, 30], 'a'))
如果不希望出现这种情况,最好将
tuple
与生成器表达式一起使用:

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

外圆括号仅为分组圆括号。您需要添加一个逗号,使外部外壳成为元组:

t = (([1, 25, 30], 'a'),) * 3
print(t)

# Output
# (([1, 25, 30], 'a'), ([1, 25, 30], 'a'), ([1, 25, 30], 'a'))
输出:

(([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'))
(([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'))
但是请记住,这些都是对同一对象的引用

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

(([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'),
 ([1, 25, 30], 'a'))
(([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'),
 ([2, 25, 30], 'a'))
见: