如何从嵌套列表中删除所有零?

2024-10-01 01:45:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从嵌套列表中删除所有零元素。但它们并没有被移除

FuzzyYesNo_nest=[ ['y', 'y', 'y', 'n', 'n', 'n', 'y', 0, 0, 0, 0, 0],
 ['n', 'n', 'n', 'n', 'y', 'n', 'n']]

for i in FuzzyYesNo_nest:
    try:
        i.remove(0)
    except:
        pass

你能看出来是什么问题吗


Tags: in元素列表forpassremovetryexcept
3条回答

如果知道嵌套只有一层深,可以使用以下列表:

[[y for y in x if y != 0] for x in FuzzyYesNo_nest]

例如:

FuzzyYesNo_nest=[ ['y', 'y', 'y', 'n', 'n', 'n', 'y', 0, 0, 0, 0, 0], ['n', 'n', 'n', 'n', 'y', 'n', 'n'] ]
print([[y for y in x if y != 0] for x in FuzzyYesNo_nest])

输出:

[['y', 'y', 'y', 'n', 'n', 'n', 'y'], ['n', 'n', 'n', 'n', 'y', 'n', 'n']]

这是因为i.remove只从列表中删除第一个元素

如果您仔细观察您的输出,您将看到零中的一个被删除

这是你的固定密码

FuzzyYesNo_nest=[ 
    ['y', 'y', 'y', 'n', 'n', 'n', 'y', 0, 0, 0, 0, 0],
    ['n', 'n', 'n', 'n', 'y', 'n', 'n']]

for i in FuzzyYesNo_nest:
    try:
        while True:
            i.remove(0)
    except:
        pass

或者您可以使用@LaytonGB建议的嵌套列表理解

请记住,上述代码将就地编辑列表,列表理解将创建数据结构的新副本

使用可以使用对每个子列表的理解来筛选0:

m = list(map(lambda l: [v for v in l if v != 0], FuzzyYesNo_nest))
>>> m
[['y', 'y', 'y', 'n', 'n', 'n', 'y'], ['n', 'n', 'n', 'n', 'y', 'n', 'n']]

相关问题 更多 >