从字符串列表中找到最长的唯一字符串python

时间:2018-10-25 10:21:43

标签: python string longest-substring

我有一个字符串列表

这些字符串由将包含在其他字符串中的字符串组成

以及最长迭代中唯一的字符串

例如,在我的列表中可能具有以下

4|131
4|201
4|131|2644
4|131|2644|547
4|131|2644|1482
2644

我希望能够将其减少到最长的唯一实体

4|201
4|131|2644|547
4|131|2644|1482
2644

我想知道python中是否有可以执行此过程的标准函数

2 个答案:

答案 0 :(得分:3)

不,Python中没有标准函数。

答案 1 :(得分:1)

没有单一功能,但是自己构建一个很容易:

lst = sorted(lst)
longests = [lst[0]]
for item in lst:
    if item.startswith(longests[-1]):
        longests[-1] = item
    else:
        longests.append(item)

print(longests)

另一种方法:

from operator import itemgetter
from itertools import groupby

class adjacent:
    def __init__(self, func, init=None):
        self.func = func
        self.last = init

    def key(self, value):
        if not self.func(self.last, value):
            self.last = value
        return self.last

slst = sorted(lst, reverse=True)
groups = groupby(slst, adjacent(str.startswith, "").key)
longests = map(itemgetter(0), groups)

print(list(longests))

请注意,上述实现将“ 4 | 1”视为前缀“ 4 | 131”,因为它使用字符串匹配。如果您只想与管道之间的整个字符串匹配,则只需先在管道上分割replace with a startswith for list