Ordenar cadenas usando el ordenamiento base ordenado por radix

La operación de esta parte del código es ordenar las cadenas en una lista alfabéticamente, al igual que ordenar las palabras en un diccionario. Un ejemplo es el siguiente:

input = ['jkttsszzo', 'zie', 'iukddrjdba', 'bwjahzwiv', 'yslzvnjdjg', 'xkm', 'aszcnljjl', 'syniimbq', 'hqgyd', 'itvis']

output = ['aszcnljjl', 'bwjahzwiv', 'hqgyd', 'itvis', 'iukddrjdba', 'jkttsszzo', 'syniimbq', 'xkm', 'yslzvnjdjg', 'zie']

La entrada es la lista de palabras antes de ordenar y la salida es la lista de palabras después de ordenar.

El código general es el siguiente:

#这里是生成26个小写字母的程序
char_list = [chr(x) for x in range(97,123)]  
print(char_list)

word_list=[]# 利用程序自动生成一个Word列表,开始设置为空
for i in range(10): # 定义生成的word的数量
    word = ''
    length = random.randint(3,10)  # 每个生成的Word包含的字符的数量是3到10之间的随机数,这个可以任意设定
    for j in range(length ):
        word = word + chr( random.randint(97,122) )
    word_list.append(word)

print(word_list)

def sort_word_list(word_list):
    max_length = len(word_list[0])
    for i in range(1,len(word_list)):#获得这个列表中最长的字符串的长度
        if len(word_list[i]) > max_length:
            max_length = len( word_list[i] )
    print(max_length)

    for i in range(max_length):

        bucket = {}
        for x in char_list:
            bucket[x] = []


        for x in word_list:
            if len(x)<max_length: # 如果某个word的长度小于最长的字符串的长度,那么就在结尾处增加'z'补足长度 ,比如apple 变为 applezzzzz
                temp_word = x + "z"*(max_length - len( x ))
            else:
                temp_word = x
            bucket[temp_word[max_length - i - 1]].append(x)

        index = 0
        for k in char_list:
            if (len(bucket[k])) != 0:
                for y in bucket[k]:
                    word_list[index] = y
                    index = index + 1

    print(word_list)


sort_word_list(word_list)

Los comentarios se explican básicamente en el código.

Supongo que te gusta

Origin blog.csdn.net/t20134297/article/details/108149879
Recomendado
Clasificación