функция для суффиксного массива python - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу написать функцию, которая выводит массив суффиксов.Это то, что у меня есть до сих пор:

def suffixArray(s):
    sa = []
    for i in range(len(s)):
        suffix= sorted([s[i:]])
        sa = [len(s)-len(suffix[i:])
    return list(sa)

Это выдает ошибку, потому что я думаю, что мне не хватает дополнительного оператора if, но я не совсем уверен, как это сделать.И да, я знаю, что, возможно, есть более простые способы получить массив суффиксов, но я новичок в python, и есть несколько функций, которые я могу использовать.Любая помощь приветствуется.Спасибо

Также вот пример того, что я хочу, чтобы мой ввод и вывод были такими: input -> suffixArray ('banana') output -> [5, 3, 1, 0, 4, 2]

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Для простого массива суффиксов:

s = 'banana'
sa = sorted([s[i:] for i in range(len(s))])

Для массива индексов суффиксов:

s = 'banana'
usd = {i: s[i:] for i in range(len(s))
sai = [x for x, _ in sorted(d.items(), key=lambda x: x[1])]
0 голосов
/ 12 февраля 2019

Сначала создайте массив с парами суффиксов: строкой суффикса и ее номером:

suffixes = [(s[i:], i) for i in range(len(s))]

Затем отсортируйте этот список по строке суффикса:

suffixes.sort(key=lambda x: x[0])

Теперь выможно вернуть только цифры:

return [s[1] for s in suffixes]

Собрать все вместе:

def suffixArray(s):
    suffixes = [(s[i:], i) for i in range(len(s))]
    suffixes.sort(key=lambda x: x[0])

    return [s[1] for s in suffixes]
0 голосов
/ 12 февраля 2019

Очевидно, вы хотите индекс каждого суффикса после лексикографической сортировки их

s = 'banana'
>>> [t[1] for t in sorted((s[i:],i) for i in range(len(s)))]
[5, 3, 1, 0, 4, 2]

или другим способом:

>>> sorted(range(len(s)), key=lambda i: s[i:])
[5, 3, 1, 0, 4, 2]
...