python:命令一个没有内置sort,min,max函数的数字列表

use*_*244 7 python sorting for-loop

如果我每次都有一个长度不同的列表,并且我想从最低到最高排序,我该怎么做?

如果我有: [-5, -23, 5, 0, 23, -6, 23, 67]

我想要: [-23, -6, -5, 0, 5, 23, 23, 67]

我从这开始:

data_list = [-5, -23, 5, 0, 23, -6, 23, 67]

new_list = []

minimum = data_list[0]  # arbitrary number in list 

for x in data_list: 
  if x < minimum:
    minimum = value
    new_list.append(i)
Run Code Online (Sandbox Code Playgroud)

但这只通过一次,我得到:

new_list = [-23] 
Run Code Online (Sandbox Code Playgroud)

这是我被卡住的地方.

我如何保持循环直到len(new_list) = len(data_list)(即所有数字都在新列表中)所有内容都排序,而不使用内置的max,min,sort函数?我不确定是否有必要创建一个新列表.

Joh*_*ooy 25

我想你正在尝试做这样的事情:

data_list = [-5, -23, 5, 0, 23, -6, 23, 67]
new_list = []

while data_list:
    minimum = data_list[0]  # arbitrary number in list 
    for x in data_list: 
        if x < minimum:
            minimum = x
    new_list.append(minimum)
    data_list.remove(minimum)    

print new_list
Run Code Online (Sandbox Code Playgroud)


Dun*_*can 6

这严格遵循您的要求,不使用sort(), min()max()但也使用 Python 最佳实践,不重新发明轮子。

data_list = [-5, -23, 5, 0, 23, -6, 23, 67]
import heapq
heapq.heapify(data_list)
new_list = []
while data_list:
    new_list.append(heapq.heappop(data_list)))
Run Code Online (Sandbox Code Playgroud)

我建议查看 Python 库以heapq.py了解它是如何工作的。堆排序是一种非常有趣的排序算法,因为它可以让您对无限流进行“排序”,即您可以快速获取当前最小的项目,但也可以有效地将新项目添加到要排序的数据中。


小智 5

这是我一直在尝试的东西.(插入排序 - 不是最好的排序方式,但做的工作)

def sort(list):
    for index in range(1,len(list)):
        value = list[index]
        i = index-1
        while i>=0:
            if value < list[i]:
                list[i+1] = list[i]
                list[i] = value
                i -= 1
            else:
                break
Run Code Online (Sandbox Code Playgroud)


Dry*_*_09 5

l = [64, 25, 12, 22, 11, 1,2,44,3,122, 23, 34]

for i in range(len(l)):
    for j in range(i + 1, len(l)):

        if l[i] > l[j]:
           l[i], l[j] = l[j], l[i]

print l
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 11, 12, 22, 23, 25, 34, 44, 64, 122]
Run Code Online (Sandbox Code Playgroud)

  • 简单、简洁且缺乏内置函数使其成为一个非常优雅的解决方案。 (2认同)