如何将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)
假设我要对三个词进行排序:
- 你好
- 再见
- 亚历克斯
并且按字母顺序将其升序排序为 ["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)