在嵌套列表中查找唯一的子列表

Finding unique sub-lists in nested lists

很长一段时间以来,我一直在努力解决以下问题:

考虑以下示例嵌套列表:example_nestedlist = [['Apple', 'Orange'], ['Apple', 'Orange'], ['Apple', 'Banana'], ['Apple', 'Banana', 'Strawberry'], ['Apple', 'Banana', 'Strawberry']]

这是我根据产品数据生成的众多嵌套列表之一,对于这些嵌套列表中的每一个(包含 1-100 个列表),我想重新创建嵌套列表,使其包含 只有独特的子列表

预期的输出可能如下所示: output_nestedlist = [['Apple'], ['Orange'], ['Banana'], ['Strawberry'], ['Apple', 'Banana']].

预期的输出不限于此。例如,第二个子列表也可以是 ['Apple', 'Orange'],而不仅仅是 ['Orange']。 最终目标仍然是拥有独特的子列表,而不管这些子列表中实际包含什么(或它们的长度)。

我已经探索了几种方法,例如:

然而,这导致(并且仍然导致)一种非常不可扩展的方法,因为它现在更多地关注嵌套列表中的内容,而不是问题本身。 也许我错过了什么,只需要一些 rubber ducking 在这里..

但我希望有人能给我一个研究的方向,非常感谢所有帮助!

edit1:保留子列表的顺序也很重要,因为稍后需要将它们连接到它们的唯一标识符。

注意:已删除最后一个答案,因为它不符合要求。

看来您需要使用组合。 结果符合条件:

  1. 结果列表应与输入列表长度相同
  2. result 中的每个项目都应该是 input 列表中相应项目的子集
  3. 结果列表不应有重复的子列表。
from itertools import combinations

example_nestedlist = [['Apple', 'Orange'], ['Apple', 'Orange'], ['Apple', 'Banana'], ['Apple', 'Banana', 'Strawberry'], ['Apple', 'Banana', 'Strawberry']]

result = []

def fill_load(sublist):
    for i in range(1, len(sublist) + 1):
        for combo in combinations(sublist, i):
            item = list(combo)
            if item not in result:
                result.append(item)
                return
    result.append(None)

for sublist in example_nestedlist:
    fill_load(sublist)

print(result)

输出:

[['Apple'], ['Orange'], ['Banana'], ['Strawberry'], ['Apple', 'Banana']]