【问题标题】:How to find how many items of list B forms list A如何查找列表B中有多少项形成列表A
【发布时间】:2020-11-15 19:46:49
【问题描述】:

我想找到构成列表A 的列表B 的最少项目。让我们假设A=['abcdef']B=['abc','ad','adef','adef','bdf']。然后因为索引为 0 和 2 的项目包含列表 A 的所有字母,所以答案将是 2。我使用该组合来查找 B 的所有可能组合。但我不确定如何继续。似乎最优化的方式是蛮力。

A=['abcdef']
B=['abc','ad','adef','adef','bdf']

for L in range(0, len(B)+1):
    for subset in itertools.combinations(B, L):
        if subset==A:
            print(subset)

【问题讨论】:

  • 当列表 A 中包含多个项目时,预期的行为是什么?
  • 列表A中总是有一项

标签: python string list combinations brute-force


【解决方案1】:

这是您尝试的扩展。我使用了一种相当令人困惑的理解将列表展平为一个集合,因此我可以使用简单的集合操作来检查一个是否是另一个的子集。

import itertools

A='abcdef'
B=['abc','ad','adef','adef','bdf']

set_a = set(A)
solved = False


for L in range(0, len(B)+1):
    for subset in itertools.combinations(B, L):
        s = set(item for sublist in subset for item in sublist)
        if set_a.issubset(s):
            print(f'String A can be made from {L} items of list B, specifically: {subset}')
            solved = True
            break
    if solved: break

【讨论】:

  • 在某些情况下,代码没有给出正确答案。我尝试调试,但没有成功。
  • 你能举一个输入的例子吗?
  • 输入的列表很长。我们可以私聊吗?
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2018-04-21
  • 2015-08-28
  • 2016-11-08
相关资源
最近更新 更多