python - 如何查找列表 B 中有多少项形成列表 A

标签 python string list combinations brute-force

我想找到构成列表 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

关于python - 如何查找列表 B 中有多少项形成列表 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64849065/

相关文章:

c# - 从 C# 中的列表中完全删除所有至少有一个重复项的元素

java - 组内组数的平均值 - 流

python - 使用URL语法发送参数

使用子字符串检查字符串是否存在(使用链表)

Python 脚本使用 Image Magick 调用 shell 脚本

c - 如何定义字符串数组的结尾

java - 在 Java 中获取集合的各个条目?

Java - 将谓词转换为字符串

python - subprocess.popen 的 poll 方法对于长进程返回 None

python bittorrent 对等协议(protocol)无法连接到任何对等点