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

问题描述 投票:0回答:2

列表可以创建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'))

有什么建议吗?谢谢。

python tuples
2个回答
30
投票

最外面的括号只是分组括号。您需要添加逗号以使外壳成为元组:

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']]



0
投票
N

None
s
 的元组
对于任何只想获取

None

的 N 个元素的元组来初始化一些变量的人来说,它看起来像这样:

N = 3
tuple_of_nones = (None,) * N

在解释器中运行和输出的示例:

>>> N = 3 >>> tuple_of_nones = (None,) * N >>> tuple_of_nones (None, None, None)

这只是对
主要答案

的一个小改动。

© www.soinside.com 2019 - 2024. All rights reserved.