按已知子字符串拆分字符串

qzwqbdag  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(260)

我有一个不同字符串的列表(这是一个示例):

strs = ["FOOBAR", "PYTHON", "MAPARTS"]

我得到了另一个包含子字符串的列表,上一个列表中的一个字符串可能包含:

substrs = ["ARTS", "FOO", "PY", "BAR", "MAP"]

我想列一个清单,列出所有的字符串 strs 可以用两个字符串在 substrs ,由它们拆分并 Package 在列表或元组中。因此,完成的列表如下所示:

[("FOO", "BAR"), ("MAP", "ARTS")]

我不知道该怎么处理,至少用一种简单的方法。有什么帮助吗?

gpfsuwkq

gpfsuwkq1#

如果您想检查两种方法的任何组合 tokens 一个单词列在 words :

from itertools import product

words = ["FOOBAR", "PYTHON", "MAPARTS"]

tokens = ["ARTS", "FOO", "PY", "BAR", "MAP"]

pairs = [_ for _ in product(tokens, tokens) if ''.join(_) in words]

导致:

>>> pairs
[('FOO', 'BAR'), ('MAP', 'ARTS')]
omqzjyyz

omqzjyyz2#

最简单的方法可能是遍历子字符串列表。对于中的每个值 substrs ,跟踪(使用已完成的列表)是否将其前置到其他每个子字符串会导致中存在的值 strs .

finished = []
substrs = ["ARTS", "FOO", "PY", "BAR", "MAP"]
strs = ["FOOBAR", "PYTHON", "MAPARTS"]

for sub1 in substrs:
  for sub2 in substrs:
    combined = sub1 + sub2
    if combined in strs: finished.append((sub1, sub2))

也许有一个更有效的算法,但这种方法是最简单的方法,我来解决这个问题。

afdcj2ne

afdcj2ne3#

使用itertools.permutations->

import itertools
result = [
    item
    for item in itertools.permutations(substrs, 2)
    if ''.join(item) in strs
]

在这里,我们的想法是获取长度2的所有排列,然后连接并检查是否在第一个列表中可用

相关问题