列表可以创建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'))
有什么建议吗?谢谢。
最外面的括号只是分组括号。您需要添加逗号以使外壳成为元组:
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']]