可以创建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'))
有什么建议吗?感谢。
答案 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']]