【发布时间】:2020-07-16 21:32:09
【问题描述】:
很长一段时间以来,我一直在努力解决以下问题:
考虑以下示例嵌套列表: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']。
最终目标仍然是拥有唯一的子列表,而不管这些子列表中的实际内容(或它们的长度)。
我已经在探索几种方法,例如:
- 使用
set()生成尽可能多的“不同”唯一子列表。 - 同时使用
set()检测完全相似的子列表,在这种情况下,我使用随机化来选择要出现在子列表中的项目。 - 这两种方法都遵循了我为捕获异常而创建的大量“规则”。
但是,这导致(并且仍然导致)一种非常不可扩展的方法,因为它现在非常关注嵌套列表中的内容,而不是问题本身。 也许我错过了什么,只是需要一些橡皮擦在这里..
但我希望有人能给我一个研究方向,非常感谢所有帮助!
edit1:保留子列表的顺序也很重要,因为稍后需要将它们连接到它们的唯一标识符。
【问题讨论】:
-
尚不清楚子列表的独特之处。它们不包含相同的项目?如果是这样,不就是
set(tuple(subl) for subl in sublists)吗? -
理想情况下,如果有多个解决方案,则显示一个输入集和所有有效结果。这将确保我们真正了解您的要求
-
@ReutSharabani 对不起,我的错!唯一性意味着没有一个子列表与另一个子列表完全相同,无论是长度还是其中的项目。它们可能都包含相似的项目,只要每个子列表之间始终存在差异。
-
@gelonida 你是对的,但我希望“所有可能的组合”都可以。每个子列表中的内容无关紧要,只要所有子列表都是唯一的(意味着没有两个子列表中的项目完全相同)。我试图在这里将其表示为“简单”示例,但是在我的实际工作数据集中,有嵌套列表包含子列表,其中每个子列表都有大约 10-25 个项目。
-
@ReutSharabani 不幸的是,该解决方案不起作用,主要是因为它忽略了嵌套列表中子列表的顺序。应该将其添加到要求中:)
标签: python unique nested-lists