填充空的嵌套列表-for循环vs列表理解

时间:2020-11-12 01:12:54

标签: python for-loop list-comprehension nested-lists

试图用一个值填充空的嵌套列表,我发现使用for循环与列表理解之间存在不同的行为,我想知道为什么这样做,尽管它们在功能上应该做同样的事情。见下文:

nl= [[True], []]

for item in nl:
    if len(item) ==0:
        item.append('false')
#this is the desired result
print(nl)
[[True], ['false']]

nl=[item.append('false') for item in nl if len(item)==0]
print(nl)
[None]
#no idea why this happens
print([item.append('false') for item in nl if len(item)==0]
print(nl)
[[True], ['false']]

3 个答案:

答案 0 :(得分:1)

这是因为item.append()不返回任何内容(即返回None)。因此,您的列表理解方法是列出None的列表。

您可以将其更改为:

nl=[['false'] if len(item)==0 else item for item in nl]

答案 1 :(得分:1)

列表理解会根据返回的值.append()来构造列表,因此就可以使用列表,因此您无需使用append,并且如果速记也可以使用英俊;-)

nl= [[True], []]
nl = [['false'] if not item else item for item in nl]
print(nl)

答案 2 :(得分:0)

nl= [[True], []]

[item.append('false') for item in nl if len(item)==0]
print(nl)

类似的事情会起作用,但是我不确定为什么要这样做。列表推导不返回任何内容,因此打印或分配列表将仅返回None。