为什么在不使用方括号的情况下使用 += 添加到 python 中的列表一次添加一个字符?
How come using += to add to a list in python without using square brackets adds one character at a time?
我试图理解为什么在计算上使用 += 添加到列表中,其中没有使用方括号来封装值,导致一次将一个字符添加到列表中一个元素。
希望问题清楚;这是一个例子:
In:
def generate_sentences(subjects, predicates, objects):
lst1 = []
lst2 = []
lst3 = []
lst4 = []
lst5 = []
subjects = sorted(subjects)
predicates = sorted(predicates)
objects = sorted(objects)
for i in subjects:
for j in predicates:
for k in objects:
lst1 += i + " "
lst2 += (i + " ")
lst3 += [i + " "]
lst4.append(i + " ")
lst5.append([i + " "])
print("+= no paren: ")
print(lst1)
print(" ")
print("+= paren: ")
print(lst2)
print(" ")
print("+= brackets: ")
print(lst3)
print(" ")
print("append standard: ")
print(lst4)
print(" ")
print("append with brackets: ")
print(lst5)
generate_sentences(["John", "Mary"], ["hates", "loves"],\
["apples", "bananas"])
generate_sentences(["Vlad", "Hubie"], ["drives"],\
["car", "motorcycle", "bus"])
和
Out:
+= no paren:
['H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ']
+= paren:
['H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ']
+= brackets:
['Hubie ', 'Hubie ', 'Hubie ', 'Vlad ', 'Vlad ', 'Vlad ']
append standard:
['Hubie ', 'Hubie ', 'Hubie ', 'Vlad ', 'Vlad ', 'Vlad ']
append with brackets:
[['Hubie '], ['Hubie '], ['Hubie '], ['Vlad '], ['Vlad '], ['Vlad ']]
我想我理解你的问题,请告诉我我是否理解正确:)。
所以这种行为有几个方面,
首先,append 和 += 的区别在于:
+= 将 2 个列表合并为一个列表。
append 向列表中添加一个元素。
所以从根本上说它们不是一回事。
其次,字符串基本上是一个字符列表,所以当您这样做时:
mylist += "a word"
你基本上是这样做的:
mylist += ['a', ' ', 'w', 'o', 'r', 'd']
尝试使用 += 将 int 添加到您的列表中,这将会发生:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
另一方面,如果您使用 append 添加一个整数,它会起作用,因为它不是添加一个列表,而是添加一个可以是任何类型的项目。
我想我已经回答了你的问题,如果你需要澄清,请告诉我:)
我试图理解为什么在计算上使用 += 添加到列表中,其中没有使用方括号来封装值,导致一次将一个字符添加到列表中一个元素。
希望问题清楚;这是一个例子:
In:
def generate_sentences(subjects, predicates, objects):
lst1 = []
lst2 = []
lst3 = []
lst4 = []
lst5 = []
subjects = sorted(subjects)
predicates = sorted(predicates)
objects = sorted(objects)
for i in subjects:
for j in predicates:
for k in objects:
lst1 += i + " "
lst2 += (i + " ")
lst3 += [i + " "]
lst4.append(i + " ")
lst5.append([i + " "])
print("+= no paren: ")
print(lst1)
print(" ")
print("+= paren: ")
print(lst2)
print(" ")
print("+= brackets: ")
print(lst3)
print(" ")
print("append standard: ")
print(lst4)
print(" ")
print("append with brackets: ")
print(lst5)
generate_sentences(["John", "Mary"], ["hates", "loves"],\
["apples", "bananas"])
generate_sentences(["Vlad", "Hubie"], ["drives"],\
["car", "motorcycle", "bus"])
和
Out:
+= no paren:
['H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ']
+= paren:
['H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'H', 'u', 'b', 'i', 'e', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ', 'V', 'l', 'a', 'd', ' ']
+= brackets:
['Hubie ', 'Hubie ', 'Hubie ', 'Vlad ', 'Vlad ', 'Vlad ']
append standard:
['Hubie ', 'Hubie ', 'Hubie ', 'Vlad ', 'Vlad ', 'Vlad ']
append with brackets:
[['Hubie '], ['Hubie '], ['Hubie '], ['Vlad '], ['Vlad '], ['Vlad ']]
我想我理解你的问题,请告诉我我是否理解正确:)。 所以这种行为有几个方面, 首先,append 和 += 的区别在于:
+= 将 2 个列表合并为一个列表。
append 向列表中添加一个元素。
所以从根本上说它们不是一回事。
其次,字符串基本上是一个字符列表,所以当您这样做时:
mylist += "a word"
你基本上是这样做的:
mylist += ['a', ' ', 'w', 'o', 'r', 'd']
尝试使用 += 将 int 添加到您的列表中,这将会发生:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
另一方面,如果您使用 append 添加一个整数,它会起作用,因为它不是添加一个列表,而是添加一个可以是任何类型的项目。
我想我已经回答了你的问题,如果你需要澄清,请告诉我:)