如何用Python移除列表中的空列表并提取元素
解决列表推导式保留子列表外层括号的问题
嗨,我来帮你搞定这个小问题!
你现在遇到的情况是,用[x for x in data if x]过滤空列表后,结果还是嵌套的子列表,而不是直接的数值。这是因为这个推导式只是把非空的子列表原样保留了,没有提取里面的元素~
最简单的针对性解决方案
因为你的每个非空子列表都只有一个元素,所以只需要在列表推导式里取出子列表的第一个元素就行:
data = [[1], [], [2], [], [], [4]] output = [x[0] for x in data if x] print(output) # 输出: [1, 2, 4]
这里的x[0]就是把每个非空子列表里的唯一元素取出来,再结合if x过滤掉空列表,正好得到你想要的结果。
适用于多元素子列表的通用方案
要是以后你的子列表里可能包含多个元素,还可以用itertools.chain来展开所有非空子列表:
from itertools import chain data = [[1], [], [2, 3], [], [], [4]] filtered_non_empty = [x for x in data if x] output = list(chain.from_iterable(filtered_non_empty)) print(output) # 输出: [1, 2, 3, 4]
这个方法更灵活,不管子列表里有几个元素,都能把它们展开成一维列表。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

