微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在元组中复制元素 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。