功能为后缀数组蟒

问题描述 投票:0回答:3

我想写输出后缀阵列功能。这是我到目前为止有:

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初学者和有,我可以使用一些功能。任何帮助表示赞赏。谢谢

还这里的我想要我的输入和输出是一个例子:输入 - > suffixArray(“香蕉”)输出 - > [5,3,1,0,4,2]

python sorting suffix-array suffix
3个回答
1
投票

显然,你希望每个后缀的索引之后lexicographicly对它们进行排序

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]

0
投票

对于一个简单的后缀数组:

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
投票

首先,生成具有后缀对的数组:后缀串,并且其数:

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]
© www.soinside.com 2019 - 2024. All rights reserved.