填充空的嵌套列表 - for 循环与列表理解
filling empty nested lists - for loop vs list comprehension
尝试用一个值填充空的嵌套列表时,我发现使用 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']]
这是因为 item.append()
没有 return 任何东西(即 returns None
)。所以你的列表理解正在制作 None
.
的列表
您可以将其更改为:
nl=[['false'] if len(item)==0 else item for item in nl]
List comprehension 根据返回的值构造 list .append()
就地完成,所以你不需要使用 append,你可以使用 handsome if shorthand ;-)
nl= [[True], []]
nl = [['false'] if not item else item for item in nl]
print(nl)
nl= [[True], []]
[item.append('false') for item in nl if len(item)==0]
print(nl)
类似这样的方法可行,但我不确定您为什么要这样做。列表理解不是 returning 任何东西,所以打印或分配它只是 return None.
尝试用一个值填充空的嵌套列表时,我发现使用 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']]
这是因为 item.append()
没有 return 任何东西(即 returns None
)。所以你的列表理解正在制作 None
.
您可以将其更改为:
nl=[['false'] if len(item)==0 else item for item in nl]
List comprehension 根据返回的值构造 list .append()
就地完成,所以你不需要使用 append,你可以使用 handsome if shorthand ;-)
nl= [[True], []]
nl = [['false'] if not item else item for item in nl]
print(nl)
nl= [[True], []]
[item.append('false') for item in nl if len(item)==0]
print(nl)
类似这样的方法可行,但我不确定您为什么要这样做。列表理解不是 returning 任何东西,所以打印或分配它只是 return None.