如何将char数组转换为数字进行排序?

How to convert a char array to a number for sorting?

假设我要对三个词进行排序:

并且按字母顺序将其升序排序为 ["alex", "goodbye", "hello"]。有没有办法转换字符串(限制为 100 个字符)?例如,如果我有:

['a', 'l', 'e', 'x']

然后我使用 ord 获取每个列表元素的代码:

[1, 12, 5, 24]

我如何从中创建一个数字,它也小于 goodbye

使用:

from operator import mul, pow
from itertools import repeat

LIMIT = 100
char_vals = [1, 12, 5, 24]
sum(map(mul, char_vals, map(pow, repeat(27), range(LIMIT - 1, -1, -1))))

由于您已经限制了字符串的长度,因此您可以将每个单词视为一个以 27 为底数的数字。 0代表该字母不存在,1代表a,2代表b,依此类推

然后,可以使用以下多项式计算每个单词的数值:

i_1 * 27**99 + i_2 * 27**98 + ...

其中char_vals = [i_1, i_2, ... i_{len(original_string)}](即每个i是对应字母的整数值,数组末尾的i对应零)。

如果我们将数组限制为 N 个字符,我们可以这样做:

words = ["hello", "goodbye", "alex"]
LETTERS_IN_ALPHABET = 26

def num_from_string(s, max_length=10):
    num = 0
    for i, char in enumerate(s):
        num += ord(char) * ((LETTERS_IN_ALPHABET+1) ** (max_length-i))
    return num

sorted(words, key=num_from_string)
# ['alex', 'goodbye', 'hello']

只需使用地图和 lambda 函数。 Python“ord”不适用于列表,仅适用于字符。

    # Original list
    words = ["hello", "goodbye", "alex"]
    # Ordinals
    words = list(map(lambda word: ord(word[0]), words))
    # To sort it: 
    words = sorted(words)