在列表中循环,然后将项目分配到新列表-有线行为

时间:2019-02-17 12:10:09

标签: python list for-loop

我遍历列表列表,当我将项目追加到数组时,它会分别添加每个字母,而不是整个单词,除非我删除“ []”。为什么会出现,只是出于好奇? 示例:

只是想知道为什么会发生这种行为

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)

而不是将每个项目添加到列表中,而是添加每个字母(同时删除列表数据类型时,按字母添加它们作为例外),只是很好奇为什么会发生。

2 个答案:

答案 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