我在尝试连接列表和元组时注意到一个令人惊讶的行为。
通常,它们不会混合:
(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/