gpt4 book ai didi

python - 从 Python 列表中删除列表子集的最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:28 24 4
gpt4 key购买 nike

假设我有一个如下所示的列表列表(实际列表要长得多):

fruits = [['apple', 'pear'],
['apple', 'pear', 'banana'],
['banana', 'pear'],
['pear', 'pineapple'],
['apple', 'pear', 'banana', 'watermelon']]

在这种情况下,列表 ['banana', 'pear']['apple', 'pear'] 中的所有项目['apple', 'pear', 'banana'] 包含在列表 ['apple', 'pear', 'banana', 'watermelon'] 中(顺序项无关紧要),所以我想删除 ['banana', 'pear']['apple', 'pear'] ['apple', 'pear', 'banana'] 因为它们是 ['apple', 'pear', 'banana', 'watermelon'] 的子集。

我目前的解决方案如下所示。我首先使用 ifilterimap 为每个列表可能具有的超集创建生成器。然后对于那些确实有超集的情况,我使用 compressimap 来删除它们。

from itertools import imap, ifilter, compress

supersets = imap(lambda a: list(ifilter(lambda x: len(a) < len(x) and set(a).issubset(x), fruits)), fruits)


new_list = list(compress(fruits, imap(lambda x: 0 if x else 1, supersets)))
new_list
#[['pear', 'pineapple'], ['apple', 'pear', 'banana', 'watermelon']]

我想知道是否有更有效的方法来做到这一点?

最佳答案

filter(lambda f: not any(set(f) < set(g) for g in fruits), fruits)

关于python - 从 Python 列表中删除列表子集的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com