在Python中创建多个项目的元组n次

时间:2016-11-12 23:16:14

标签: python tuples

可以创建n次列表:

a = [['x', 'y']]*3 # Output = [['x', 'y'], ['x', 'y'], ['x', 'y']]

但是我想以这种方式制作一个元组,但它不会返回与列表中类似的结果。我正在做以下事情:

a = (('x','y'))*4 # Output = ('x', 'y', 'x', 'y', 'x', 'y', 'x', 'y')
Expected_output = (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:20)

外括号仅分组括号。您需要添加逗号以使外部机箱成为元组:

a = (('x','y'),)*4
print(a)
# (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))

对于上下文,例如,在执行f = (x + y)时获取元组是没有意义的。

为了定义单例元组,通常需要逗号:

a = (5)  # integer
a = (5,) # tuple
a = 5,   # tuple, parens are not compulsory

另一方面,跨嵌套容器复制项目需要的不仅仅是一个简单的mult。操作。考虑您的第一个操作,例如:

>>> a = [['x', 'y']]*3
>>> # modify first item
...
>>> a[0][0] = 'n'
>>> a
[['n', 'y'], ['n', 'y'], ['n', 'y']]

基本上没有第一项 - 父列表只包含一个在不同索引之间重复的列表对象。对于元组来说,这可能不是特别令人担忧,因为它们不可变任何方式。

考虑使用更正确的食谱:

>>> a = [['x', 'y'] for _ in range(3)]
>>> a[0][0] = 'n'
>>> a
[['n', 'y'], ['x', 'y'], ['x', 'y']]