我有一个字符串列表
这些字符串由将包含在其他字符串中的字符串组成
以及最长迭代中唯一的字符串
例如,在我的列表中可能具有以下
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中是否有可以执行此过程的标准函数
答案 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。