【问题标题】:How to find which items in list of lists is equal to another list如何查找列表列表中的哪些项目等于另一个列表
【发布时间】:2020-10-27 03:48:03
【问题描述】:

我有一个如下所示的列表:

[[0],
[0, 1, 2],
[2],
[3],
[4],
[5],
[0, 1, 2, 3, 4, 5, 6, 7],
[7],
[8],
[9],
[8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
[11],
[11, 12, 13, 14, 15, 16, 17, 18],
[13],
[14],
[14, 15, 16, 17, 18],
[16, 17, 18],
[17],
[17, 18]]

我试图在列表中找到最少数量的项目,当连接时,等于列表的整个范围。在这种情况下,列表的完整范围是这样的:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

所以在这种情况下,列表列表中的这两项将等于整个范围:

[0]
[0, 1, 2]
[2]
[3]
[4]
[5]
---> [0, 1, 2, 3, 4, 5, 6, 7]
[7]
[8]
[9]
---> [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[11]
[11, 12, 13, 14, 15, 16, 17, 18]
[13]
[14]
[14, 15, 16, 17, 18]
[16, 17, 18]
[17]
[17, 18]

【问题讨论】:

  • 不清楚你的最后一个例子代表什么。您能否解释一下您的预期输出是什么?是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]吗?
  • 预期的输出应该是[[0,1,2,3,4,5,6,7], [8,9,10,11,12,13,14,15,16,17,18]]

标签: python list numpy indexing


【解决方案1】:

使用itertools.permutationschain 的一种方式:

from itertools import permutations, chain

starget = sorted(target)
for i in range(2, len(target)):
    for perm in permutations(l, i):
        if sorted(chain(*perm)) == starget:
            print(i, perm)
            break
    break

输出:

2 ([0, 1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18])

【讨论】:

  • 谢谢,但我不明白,这是怎么回事? target 是什么?
猜你喜欢
  • 2022-11-03
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2013-03-11
  • 1970-01-01
  • 2019-12-31
  • 2020-01-08
相关资源
最近更新 更多