试图用一个值填充空的嵌套列表,我发现使用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']]
答案 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。