基数排序 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 字符串的主要内容,如果未能解决你的问题,请参考以下文章

“基数排序”展现Python的优雅与简洁

你需要知道的九大排序算法Python实现之基数排序

Python中的基数排序[关闭]

为啥我的基数排序 python 实现比快速排序慢?

python 基数排序

使用python函数进行基数排序