python - 在 python 中连接列表和元组的行为不一致

标签 python list tuples concatenation

我在尝试连接列表和元组时注意到一个令人惊讶的行为。

通常,它们不会混合:

(0, 1) + [2, 3]

结果:

TypeError: can only concatenate tuple (not "list") to tuple

反之亦然

[0, 1] + (2, 3)

给出:

TypeError: can only concatenate list (not "tuple") to list

到目前为止,没有什么出乎意料的。 但是,如果您通过“+=”使用变量赋值,列表的行为会发生变化!

l = [0, 1]
l += (2, 3)
l

给予

[0, 1, 2, 3]

但不适用于元组:

t = (0, 1)
t += [2, 3]
t

仍然产生错误:

TypeError: can only concatenate tuple (not "list") to tuple

当然,这里没有实际问题,但我很好奇: 那里发生了什么?

最佳答案

列表的

+= 不期望将实际列表作为其右侧操作数;它将接受任何可迭代的值。它实际上是 list.extend 的运算符版本(接受任意可迭代值)。

tuple 根本没有定义 __iadd__,所以 t += [2, 3] 只是 的语法糖t = t + [2,3],我们已经确认 tuple.__add__ 不能将元组和列表相加。

关于python - 在 python 中连接列表和元组的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56379386/

相关文章:

java - 从迭代列表中保存对象

python - 抓取列表的特定索引

python - 更新字典中特定位置的所有值

scala - 创建包含滞后元组的 Scala 序列的优雅方式

python - 使用 PySpark 删除 spark 数据框中嵌套结构中的列(文本中的详细信息)

python - Matplotlib 上的共享分类 Y 轴

python - 随机选择一个元组集,然后将其从原始元组列表中删除

wpf - 带有 WPF 绑定(bind)的 ValueTuple

python - 在第二个或第三个大写字母后面插入空格 python

python - 使用node.js创建RSA签名并使用python进行验证