检查是否可以通过链接lis中的元素来创建字符串

2024-04-19 07:04:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查是否可以通过链接给定列表中的元素来创建字符串,以及这种连接是什么。 例如:

String = 'BIBER'
List = ['BI', 'BIB', 'BIBE', 'BE', 'BER', 'ER']

“BIBER”可以由“BI”和“BER”组成

所以程序应该返回TRUE和一个包含组件的列表:

components = ['BI','BER']

我已经试过了,但是我无法检查组件是什么:

r = re.compile("(?:" + "|".join(List) + ")*$")
    if r.match(Word) != None:
        print('TRUE')

Tags: 字符串true元素列表string链接组件be
2条回答

正在使用itertools.combinations

此功能应完成以下工作:

def check(String, List):
    return String in [a+b for a,b in itertools.combinations(List, 2)]

返回True输入:

check('BIBER', ['BI', 'BIB', 'BIBE', 'BE', 'BER', 'ER'])

你可以用暴力:

s = 'BIBER'
li = ['BI', 'BIB', 'BIBE', 'BE', 'BER', 'ER']

import itertools as it

for i in range(2,len(li)+1):
    for t in it.permutations(li, i):
        if ''.join(t)==s:
            print t

印刷品:

('BI', 'BER')
('BIB', 'ER')

如果要测试某组子字符串是否可以完全组合为一个字符串:

def builds(s, componts):
    return any(s==''.join(t) for t in it.permutations(componts))  

>>> builds(s, ('R','BE','I','B'))
True

这不会处理多次重用不同的子字符串(例如('B','I','E','R')),因此,您可以考虑使用Trie。你知道吗

相关问题 更多 >