[英]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 :保留子列表的顺序也很重要,因为稍后需要将它们连接到它们的唯一标识符。
注意:删除了最后一个答案,因为它不符合要求。
看起来您需要使用组合。 结果匹配条件:
result
中的每个项目都应该是input
列表中相应项目的子集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.