繁体   English   中英

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

[英]Finding unique sub-lists in nested lists

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

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

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

预期的 output 可能如下: output_nestedlist = [['Apple'], ['Orange'], ['Banana'], ['Strawberry'], ['Apple', 'Banana']]

预期的 output 不限于此。 例如,第二个子列表也可以是['Apple', 'Orange'] ,而不仅仅是['Orange'] 最终目标仍然是拥有唯一的子列表,而不管这些子列表中的实际内容(或它们的长度)。

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

  • 使用set()生成尽可能多的“不同”唯一子列表。
  • 同时还使用set()来检测完全相似的子列表,在这种情况下,我使用随机化到 select 出现在子列表中的项目。
  • 这两种方法都遵循了我为捕获异常而创建的大量“规则”。

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

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

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)

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM