嵌套的Python列表理解

Pas*_*ten 2 python list-comprehension list

我有一个以下结构的嵌套列表:

nested = [["a","b"], ["c", "d"]]
Run Code Online (Sandbox Code Playgroud)

我现在想坚持这个结构,但删除元素属于另一个列表.想象一下这个清单stoplist = ["a","z"]

结果将是:

[["b"], ["c", "d"]] 
Run Code Online (Sandbox Code Playgroud)

我希望我在这里错过了一个简单的事情,但在这种情况下我似乎无法获得列表理解:

[letter for letter in List if letter not in stoplist for List in nested],
Run Code Online (Sandbox Code Playgroud)

它运行,但它给出了这个结果: ['c', 'c', 'd', 'd']

发生了什么,以及如何解决这个问题?

注意:我知道这可以通过追加来完成,但我宁愿避免这种情况,因为我将使用大文件.

DSM*_*DSM 5

也许是这样的

>>> nested = [["a","b"], ["c", "d"]]
>>> stoplist = ["a", "z"]
>>> [[letter for letter in sublist if letter not in stoplist] for sublist in nested]
[['b'], ['c', 'd']]
Run Code Online (Sandbox Code Playgroud)

虽然如果stoplist它是可以清洗的,它可能会更快set(尽管很难猜测真正的小集合 - timeit并找出它是否重要).

>>> stopset = set(stoplist)
>>> [[letter for letter in sublist if letter not in stopset] for sublist in nested]
[['b'], ['c', 'd']]
Run Code Online (Sandbox Code Playgroud)

您当前的listcomp可以解压缩到

newlist = []
for letter in List:
    if letter not in stoplist:
        for List in nested:
            newlist.append(letter)
Run Code Online (Sandbox Code Playgroud)

哪个(这让我困惑了几分钟)根本不应该真正起作用.它必须List从早期的运行中恢复过来.

请注意,在列表推导中编写嵌套的顺序与编写等效的嵌套for循环的顺序相同.