我试图在不修改现有列表或使用内置函数(如android:showAsAction
或sort
)的情况下对列表进行排序。遇到负数时我遇到了麻烦。例如,对列表进行排序
sorted
产生
[7,1,-5,18]
而不是
[1, -5, 7, 18]
我的代码:
[-5, 1, 7, 18]
答案 0 :(得分:1)
您可以使用此选择排序逻辑:
>>> l=[7,1,-5,18]
>>> for i in range(len(l)):
... for j in range(i+1, len(l)):
... if l[j]<l[i]:
... l[i],l[j]=l[j], l[i]
...
>>> l
[-5, 1, 7, 18]
答案 1 :(得分:0)
这里的问题是,您要将值附加到列表的末尾,然后将它们移动到一个位置,如果它们小于前一个元素。更改列表中元素的位置后,您必须检查是否需要再次移动 。
一步一步,这就是:
remaining elements to sort | "sorted" list | what happens
7,1,-5,18 []
1,-5,18 [7] first element enters the sorted list
-5,18 [7,1] 2nd element enters the sorted list
-5,18 [1,7] 7>1, so last element changes location
18 [1,7,-5] 3rd element enters sorted list
18 [1,-5,7] 7>-5, last element changes location
[] [1,-5,7,18] instead of checking whether 1>-5, the 4th
element enters the list
通过将if
更改为如下所示的循环,可以轻松解决此问题:
lst = [7,1,-5,18]
b = list()
for i in range(len(lst)):
b.append(lst[i])
while i>0 and b[i]<b[i-1]:
b[i], b[i-1] = b[i-1], b[i]
i-= 1
print b