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']
发生了什么,以及如何解决这个问题?
注意:我知道这可以通过追加来完成,但我宁愿避免这种情况,因为我将使用大文件.
也许是这样的
>>> 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循环的顺序相同.