我想通过删除已经排序的项来提高算法的效率,但我不知道如何才能有效地做到这一点。我发现的唯一方法就是重写整个列表。
l = [] #Here you put your list
sl = [] # this is to store the list when it is sorted
a = 0 # variable to store which numbers he already looked for
while True: # loop
if len(sl) == len(l): #if their size is matching it will stop
print(sl) # print the sorted list
break
a = a + 1
if a in l: # check if it is in list
sl.append(a) # add to sorted list
#here i want it to be deleted from the list.发布于 2020-07-22 21:42:59
变量a有点笨拙。它从0开始,将1递增1,直到它与列表l中的元素相匹配
想象一下如果l = [1000000, 1200000, -34]。然后,你的算法将首先运行1000000次迭代,不做任何事情,只是将a从0递增到1000000。然后,它会将1000000附加到sl。然后,它将再次运行200000次迭代,不做任何事情,只是将a从1000000递增到1200000。
然后,它将继续递增a,查找数字-34,该数字小于零...
我知道您的变量a背后的思想是按顺序从l中选择元素,从最小的元素开始。有一个函数可以做到这一点:它被称为min()。尝试使用该函数从l中选择最小的元素,并将该元素附加到sl。然后从l中删除该元素;否则,下一次调用min()将再次选择相同的元素,而不是选择下一个最小的元素。
请注意,min()有一个缺点:它返回最小元素的值,但不返回它在列表中的位置。因此,在使用min()找到元素之后,如何从l中删除它并不是很明显。另一种方法是编写自己的函数,同时返回元素及其位置。在下面的代码中,i引用列表中的一个位置(0是第一个元素的位置,1是第二个元素的位置,依此类推),a引用该元素的值。我留了空格,您必须弄清楚如何选择列表中最小元素的位置和值。
....
for i, a in enumerate(l):
if ...:
...
...如果你做到了这一切,恭喜你!你已经实现了“选择排序”。这是一个广为人知的排序算法。这是最简单的方法之一。还有许多其他的排序算法。
https://stackoverflow.com/questions/63035269
复制相似问题