Найти самые длинные уникальные строки из списка строк Python - PullRequest
0 голосов
/ 25 октября 2018

У меня есть список строк

Эти строки состоят из строк, которые будут содержаться в других строках

И строк, которые являются уникальными в самой длинной итерации

Например, в моем списке может быть следующее

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 голосов
/ 25 октября 2018

Нет отдельной функции, но ее довольно легко создать самостоятельно:

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", потому что он использует сопоставление строк.Если вы хотите сопоставить только целые строки между каналами, вам просто нужно сначала разделить их на каналы и заменить на начальные с списком .

0 голосов
/ 25 октября 2018

Нет, в Python нет стандартной функции.

...