Python嵌套列表推导式

2024-04-26 05:34:57 发布

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

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

nested = [["a","b"], ["c", "d"]]

我现在想坚持这个结构,但是如果元素属于另一个列表,就删除它们。 假设这个列表是stoplist = ["a","z"]

所以结果是:

^{pr2}$

我希望我遗漏了一件简单的事情,但在这种情况下,我似乎无法理解列表:

^{3}$

它运行,但返回以下结果:['c', 'c', 'd', 'd']

怎么回事,怎么解决?在

注意:我知道这可以用append来完成,但是我希望避免这种情况,因为我将处理大文件。在


Tags: 文件元素列表情况事情结构nestedappend
3条回答

还有一个方法,将非索引字表设为集合,然后使用集合差分运算:

>>> stoplist = {'a', 'z'}
>>> [list(set(l)-stoplist) for l in nested]
[['b'], ['c', 'd']]

试试看

[ [letter for letter in List if letter not in stoplist] for List in nested]

请注意,只有当nested嵌套一层时,这才有效。在

也许是像

>>> 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']]

尽管如果stoplist中的内容是可散列的,那么将其设为set可能会更快(尽管很难猜测非常小的集合timeit并找出它是否重要)。在

^{pr2}$

您当前的listcomp可以解压到

newlist = []
for letter in List:
    if letter not in stoplist:
        for List in nested:
            newlist.append(letter)

这(这让我困惑了几分钟)根本不应该起作用。它一定是从先前运行的List中提取的。在

请注意,在列表理解中编写嵌套的顺序与编写等效的嵌套for循环的顺序相同。在

相关问题 更多 >