如何查找列表 B 中有多少项形成列表 A
How to find how many items of list B forms list A
我想找到构成列表 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)
这是您尝试的扩展。我使用了一种相当混乱的理解来将列表展平成一个集合,这样我就可以利用简单的集合操作来检查一个是否是另一个的子集。
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
我想找到构成列表 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)
这是您尝试的扩展。我使用了一种相当混乱的理解来将列表展平成一个集合,这样我就可以利用简单的集合操作来检查一个是否是另一个的子集。
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