【问题标题】:Python - Sorting lists of numbersPython - 对数字列表进行排序
【发布时间】:2013-02-24 22:29:27
【问题描述】:

刚刚学习 Python 并开始学习排序列表的主题。展示了两种类型的算法:插入和选择。所以,我有了一个想法并创造了这个:

def DiffSort(lst):
    lstDiff = [None] * len(lst)
    i = 0

    while i < len(lst):
        lstDiff[i] = lst[i] - lst[i-1] if i != 0 else lst[0]

        if lstDiff[i] < 0:
            sbj, tmp = lst[i], lstDiff[i]

            while tmp < 0:
                i -= 1
                tmp += lstDiff[i]
                lst[i+1] = lst[i]

            lst[i] = sbj
        else:
            i += 1

lst = [13,25,18,122,32,1,0.78,25,85,1,32,56,0.55,0.6,17]
print(lst)

DiffSort(lst)

print(lst)

有什么好处吗?有没有类似的方法?

【问题讨论】:

  • 聪明,但我认为这只是插入排序,缺点是它不适用于任意可比较对象(例如字符串、元组等)。所以它不会超过timsort,对不起:)
  • 您是在寻找在 Python 中正常排序列表的最佳方法,还是对排序算法的理论感兴趣?
  • 他显然对排序算法很感兴趣......每个人都在回答好像他只是问如何对列表进行排序xD无论如何,OnT:lstDiff列表似乎是多余的,你只是使用当前索引(可以用一个简单的变量代替)。另外,同意 Eevee 的观点,它似乎使用差异而不是条件进行插入排序。
  • 为反馈干杯,我正在逐步介绍 Python。只是看看我是否在那里做某事......哈哈。

标签: python list sorting numbers


【解决方案1】:

list.sort() 如果你想对列表进行就地排序。

sorted(list) 如果您想返回列表的排序副本。

第二个选项适用于任何可迭代类型,而第一个选项是列表排他的(尽管某些其他类型可能也定义了相同或类似的函数,但您通常不能指望这一点)。

由于您似乎关心其中的算法部分,因此您可能会感兴趣: http://svn.python.org/projects/python/trunk/Objects/listsort.txt

【讨论】:

  • 干杯,看起来很有趣。
【解决方案2】:

lst.sort() 还不够好吗?它肯定比必须在 O(n^2) 时间内运行的 Python 解决方案快得多。

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多