我正在尝试对未排序的列表进行排序[4,5,9,9,9,0,1,8]
该列表包含两个重复的元素。我试图通过循环遍历每个元素,将每个元素与列表中的下一个元素进行比较,然后将较小的元素放在列表的开头来解决这个问题。
def sort(ls:
ls[x]
x = [4, 5, 9, 9, 0, 1, 8]
while len(x) > 0:
for i in the range(0, len(x)):
lowest = x[i]
ls.append(lowest)
请,有人可以解释我出了什么问题以及代码应如何工作吗?
可能是我对问题有错误的考虑,并且我对代码应如何工作的推理不正确
答案 0 :(得分:0)
是的,您可以尝试x.sort()或sorted(x)。签出https://www.programiz.com/python-programming/methods/built-in/sorted。另外,在您的程序中,我看不到您进行任何比较,例如,如果x [i] <= x [i + 1]则... 该代码块将按相同顺序附加所有元素,直到n * n次。 还要检查此https://en.wikipedia.org/wiki/Insertion_sort
答案 1 :(得分:0)
我不知道这是否正是您要寻找的内容,但是请尝试:sorted(ListObject)
。
sorted()
从最小到最大返回列表中的元素。如果重复一个元素,则重复的元素就在原始元素之后。希望有帮助。
答案 2 :(得分:0)
对于要排序的内置Python函数,以y为原始列表,可以使用sorted(y)或y.sort()。请记住sorted(y)将返回一个新列表,因此您需要将其分配给变量,例如x = sorted(y);而如果您使用x.sort(),它将原位改变原始列表,因此您可以按原样调用它。
如果您想实际实现排序功能,可以尝试以O(n log n)运行的Merge Sort或Quick Sort,它可以处理具有相同值的元素。如果需要,可以查看-> https://www.geeksforgeeks.org/python-program-for-merge-sort/。为了使排序算法更容易理解,Insertion或Bubble排序也可以处理重复项,但运行时较长O(n ^ 2)-> https://www.geeksforgeeks.org/python-program-for-bubble-sort/。
但是,是的,我同意Nameet的观点,您当前发布的内容看起来只是按照相同的顺序添加。
尝试上述建议之一,希望这可以为您提供正确的方向,以帮助您查找内置函数或实现排序,这可以通过多种方式通过不同的adv和disadv来完成。每一个。希望这会有所帮助,并祝你好运!
答案 3 :(得分:0)
有几种流行的排序方式。以气泡排序为例
def bubbleSort(array):
x = len(array)
while(x > 1): # the code below make sense only there are at least 2 elements in the list
for i in range(x-1): # maximum of i is x-2, the last element in arr is arr[x-1]
if array[i] > array[i+1]:
array[i], array[i+1] = array[i+1], array[i]
x -= 1
return array
x = [4, 5, 9, 9, 0, 1, 8]
bubbleSort(x)
您的代码具有与以下相同的逻辑
def sorts(x):
ls = []
while len(x) > 0:
lowest = min(x)
ls.append(lowest)
x.remove(lowest)
return ls
x = [4, 5, 9, 9, 0, 1, 8]
sorts(x)
#output is [0, 1, 4, 5, 8, 9, 9]