基数排序 Python 字符串
Posted
技术标签:
【中文标题】基数排序 Python 字符串【英文标题】:Radix Sort Python String 【发布时间】:2018-03-15 13:26:51 【问题描述】:如何在 Python 中为不同长度的带空格的字符串编写 RADIX SORT?
例如我的输入是
["THE LORD","HELP", "WHO IS THAT"]
我想买
["HELP", "THE LORD", "WHO IS THAT"]
谢谢
【问题讨论】:
How to sort a list of words by length的可能重复 这个问题不清楚。您想要一个基数排序算法的实现来对您的列表进行排序吗? @SembeiNorimaki 是的,我想使用基数排序算法对我的列表进行排序 在Wikipedia 中,您可以在python 中实现基数算法。但是您是否出于任何特定原因需要此算法? 【参考方案1】:怎么样
ll=["THE LORD","HELP", "WHO IS THAT"]
sorted(ll, key=len)
了解sorted()
here。
如果你也需要这个排序,那么做
l=sorted(ll, key=len)
l.sort()
或使用lambda function,
l=sorted(ll, key = lambda x: (len, x))
首先考虑长度,然后考虑字符串本身。
或者如果您不想保留原始列表,
ll.sort(key=lambda x: (len, x))
sort()
修改原始列表,而sorted()
生成一个新列表。
【讨论】:
【参考方案2】:Wikipedia 实现了基数排序算法
def radix_sort(array, base=10):
def list_to_buckets(array, base, iteration):
buckets = [[] for _ in range(base)]
for number in array:
# Isolate the base-digit from the number
digit = (number // (base ** iteration)) % base
# Drop the number into the correct bucket
buckets[digit].append(number)
return buckets
def buckets_to_list(buckets):
numbers = []
for bucket in buckets:
# append the numbers in a bucket
# sequentially to the returned array
for number in bucket:
numbers.append(number)
return numbers
maxval = max(array)
it = 0
# Iterate, sorting the array by each base-digit
while base ** it <= maxval:
array = buckets_to_list(list_to_buckets(array, base, it))
it += 1
return array
【讨论】:
以上是关于基数排序 Python 字符串的主要内容,如果未能解决你的问题,请参考以下文章