python – 在列表中循环并将项目分配给新列表 – 有线行为

我遍历列表列表,当我将项目附加到数组时,它会单独添加每个字母,而不是整个单词,除非我删除'[]’..为什么会发生,只是好奇?

例:

只是好奇知道为什么会出现这种情况

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)

而不是将每个项目添加到列表中,它添加每个字母(同时删除列表数据类型,它将字母添加为例外)只是好奇为什么会发生这种情况.

最佳答案 欢迎来到Stackoverflow.这是一个非常有趣的问题.

您的外部循环依次为每个子列表设置列表(顺便选择名称,顺便说一下,因为它也是Python内置类型的名称),内部循环将项目设置为内部列表中每个单词的值.

如果你写的

s = s + item

代替

s += item

然后你会看到由于右侧的表达而引发的异常:

>>> [] + "abc"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

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

然而,=运算符的行为并不完全相同.在this question中有一个有趣的讨论.底线是如果=的右手操作符是可迭代的,则解释器迭代它,将每个项追加到列表中.

如果您只是想将每个项目添加到s列表,则应该使用append方法:

s.append(item)
点赞