到目前为止,我认为列表可以包含不同类型的元素,并且每个元素都有自己的类型信息。但是,这个例子似乎暗示了一些不同的东西:
def not_working():
A = B = []
for x in range(1,30):
A.append("str")
B.append(True)
for a,b in zip(A,B):
print a + str(b)
导致错误
print a + str(b)
TypeError: unsupported operand type(s) for +: 'bool' and 'str'
虽然这可以按预期工作:
def working():
A = []
B = []
for x in range(1,30):
A.append("str")
B.append(True)
for a,b in zip(A,B):
print a + str(b)
请注意,唯一的区别是A = B = []
与A = []
和B = []
在单独的行中。
为什么第一个功能被破坏而第二个功能按预期工作?
答案 0 :(得分:3)
因此,当您执行A = B = []
时,这将定义由变量A
和B
引用的单个列表。
您可以使用以下代码检查此内容
A = B = []
A.append('a')
print(A)
print(B)
您会注意到A
和B
都是['a']
然后发生错误,因为a变量在最终循环中可以是布尔值
答案 1 :(得分:3)
在第一种情况下,A
和B
会引用相同的列表,因此每次调用追加时,都会更改。
a = b = []
a.append("str")
print(a, b) # ['str'] ['str']
b.append(True)
print(a, b) # ['str', True] ['str', True]
当您拨打zip
功能时,您会获得列表[("str", "str"), (True, True)]
,而不是预期的[("str", True)]
。
然后尝试print True + str(True)
这就是为什么你得到TypeError
。
在第二种情况下,列表不同:
c = []
d = []
c.append("str")
print(c, d) # ['str'] []
d.append(True)
print(c, d) # ['str'] [True]
答案 2 :(得分:2)
std::vector::emplace_back
首次尝试时,您会尝试添加std::vector
,这会产生错误,但您的第二次尝试会def not_working():
A = B = []
for x in range(1, 5):
A.append("str")
B.append(True)
print("A:", A, "B: ", B)
def working():
A = []
B = []
for x in range(1, 5):
A.append("str")
B.append(True)
print("A:", A, "B: ", B)
not_working()
working()
A: ['str', True, 'str', True, 'str', True, 'str', True]
B: ['str', True, 'str', True, 'str', True, 'str', True]
A: ['str', 'str', 'str', 'str']
B: [True, True, True, True]
,这将有效。