【问题标题】:Radix Sort Python String基数排序 Python 字符串
【发布时间】:2018-03-15 13:26:51
【问题描述】:

如何在 Python 中为不同长度的带空格的字符串编写 RADIX SORT?

例如我的输入是

["THE LORD","HELP", "WHO IS THAT"]

我想买

["HELP", "THE LORD", "WHO IS THAT"] 

谢谢

【问题讨论】:

  • 这个问题不清楚。您想要一个基数排序算法的实现来对您的列表进行排序吗?
  • @SembeiNorimaki 是的,我想使用基数排序算法对我的列表进行排序
  • Wikipedia 中,您可以在python 中实现基数算法。但是您是否出于任何特定原因需要此算法?

标签: python string radix-sort


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 2019-10-22
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多