Python 不支持向列表中添加元组:
>>> [1,2,3] + (4,5,6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
在语言中提供这样的支持有什么缺点?请注意,我希望这是对称的:[1, 2] + (3, 4)
和 (1, 2) + [3, 4]
都会计算到一个全新的列表 [1, 2, 3, 4]
。我的理由是,一旦有人将运算符 + 应用于元组和列表的混合,他们很可能会再次这样做(很可能在同一个表达式中),因此我们不妨提供列表以避免额外的转换。
这是我提出这个问题的动机。
我经常有一些小集合,我更喜欢将它们存储为元组以避免意外修改并提高性能。然后我需要将这些元组与列表结合起来,并且必须将它们中的每一个都转换为列表使得代码非常难看。
请注意,+=
或 extend
可能适用于简单的情况。但一般来说,当我有一个表达
columns = default_columns + columns_from_user + calculated_columns
我不知道其中哪些是元组,哪些是列表。所以我要么必须将所有内容都转换为列表:
columns = list(default_columns) + list(columns_from_user) + list(calculated_columns)
或者使用 itertools:
columns = list(itertools.chain(default_columns, columns_from_user, calculated_columns))
这两种解决方案都比简单的加法难看;并且 chain
也可能更慢(因为它必须一次遍历输入一个元素)。
最佳答案
这不受支持,因为 +
运算符应该是对称的。您期望什么返回类型? Python Zen 包含规则
In the face of ambiguity, refuse the temptation to guess.
不过,以下是可行的:
a = [1, 2, 3]
a += (4, 5, 6)
这里没有歧义使用什么类型。
关于python - 为什么我不能在 Python 中使用 '+' 运算符将元组添加到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9897070/