У меня есть школьный проект, где мне нужно сортировать все типы данных с различными алгоритмами сортировки. Сорт Radix работает хорошо, но он не может сортировать ничего, кроме целых. Вероятно, я не собираюсь добавлять результаты сортировки для чего-либо еще, кроме целого числа, поскольку каждый тип данных будет отсортирован как целые числа.Преобразование строк в числа (без разбора) для сортировки radix
Это было сказано, Я хотел бы узнать, есть ли лучший способ преобразования строк в целые числа? Вот что я пришел. Я не хотел перехитрить python и старался использовать стандартную функцию как можно больше.
def charToHex(char):
return hex(ord(char))[2:]
def stringToHex(text):
t = ''
for char in text:
t += charToHex(char)
return t
def stringToInt(text):
return int(stringToHex(text), 16)
print stringToInt('allo')
print stringToInt('allp')
print stringToInt('all')
Это хорошо работает, но я был бы рад узнать, есть ли лучший способ справиться с этим. Для того, что это стоит, сортировка чего-либо другого, кроме целых чисел с сортировкой radix, бессмысленна. Потому что даже если вы можете отсортировать список целых чисел. Вам нужно будет вернуть значения для всех ключей в список.
Я имел в виду сделать что-то подобное. Для каждого значения в моем списке получите целочисленный ключ. Поместите этот ключ внутри хэш-таблицы и значение в списке для этой хеш-таблицы. Замените значение в списке целым ключом, а затем отсортируйте список ключей.
Для каждого ключа в отсортированном списке получите список значений для этого ключа и поместите один элемент. Поместите этот элемент в список и продолжайте.
Я также хотел бы знать, есть ли способ оптимизировать этот процесс, чтобы сделать его полезным, используя сортировку radix, а не другую сортировку, которая не требует никакого преобразования. Количество элемента в списке может выйти за пределы 50000.
редактировать
На самом деле здесь код не работает для строк разных размеров. Я не уверен, как это проверить. Похоже, что заполнение строк пространством работает.
def getMaxLen(ls):
lenght = 0
for text in ls:
lenght = max(lenght, len(text))
return lenght
def convertList(ls):
size = getMaxLen(ls)
copy = ls[:]
for i, val in enumerate(copy):
copy[i] = stringToInt(val.ljust(size, ' '))
return copy
print convertList(["allo", "all", "bal"])
+1 для ссылки на статью , хорошо читать! –