我遍历列表列表,当我将项目追加到数组时,它会分别添加每个字母,而不是整个单词,除非我删除“ []”。为什么会出现,只是出于好奇? 示例:
只是想知道为什么会发生这种行为
def printTable(lists):
for list in lists:
s = []
for item in list:
s += item
print(s)
print()
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
printTable(tableData)
而不是将每个项目添加到列表中,而是添加每个字母(同时删除列表数据类型时,按字母添加它们作为例外),只是很好奇为什么会发生。
答案 0 :(得分:5)
而不是s += item
,请尝试以下操作:
s.append(item)
当您说s += item
时,它等同于s = s + item
,并且肯定s
是列表,而item
是字符串,并且在python中字符串是可迭代的,所以这就是为什么看起来像这样。
看下面的例子:
a = 'hi'
print(list(a))
['h', 'i']
也正如@roganjosh在评论中所说:
请注意,使用
list
作为变量名不是很好,list
是python内置的。
答案 1 :(得分:1)
欢迎使用Stackoverflow。这是一个很有趣的问题。
您的外部循环依次为每个子列表设置list
(顺便说一句,名称选择不当,因为它也是Python内置类型的名称),而内部循环则设置{{1} }到内部列表中每个单词的值。
你写过
item
代替
s = s + item
然后您将看到由于右侧的表达式而引发了异常:
s += item
+ =运算符的行为并不完全相同。 this question中有一个有趣的讨论。最重要的是,如果>>> [] + "abc"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
的右侧运算符是可迭代的,则解释器将对其进行迭代,并将每个项目附加到列表中。
如果您只是想将每个项目添加到+=
列表中,则应该使用s
方法:
append