我希望获得一个按升序排列的有序列表,但是省略原始列表中的第一个元素。 但是第一个for-loop只运行了4次。在第一个for循环中循环4次后:
lst=[6, 5, 4]
我认为第一个for循环应该继续运行,但它结束了。我不知道为什么?
以下源代码:
#coding: utf-8
lst = [0, 1, 6, 2, 5, 3, 4]
new_lst = [] # the ordered list, [0, 1, 2, 3, 4, 5, 6]
p0 = lst[0] # the first element can be arbitrary
lst.remove(p0)
new_lst.append(p0)
for temp in lst:
lst.remove(temp)
while 1:
for pt in lst:
if temp < pt:
continue
else:
lst.append(temp)
temp = pt
lst.remove(pt)
break
else:
new_lst.append(temp)
break
print("the ordered list:", new_lst)
最后,我只得到:
('the ordered list:', [0, 1, 2, 3])
答案 0 :(得分:1)
忽略排序中的第一个元素:
newlst = [lst[0]]+sorted(lst[1:])
第一个元素lst [0]必须包含在[]中以获取一个列表,该列表可以使用+
和列表的其余部分(lst [1:])进行扩展。
答案 1 :(得分:0)
尝试new_lst = sorted(lst)
。这将按整数值对列表进行排序(如果存在字符,则为ascii值)。对于您的问题,这是一个更好的解决方案,并且更加pythonic。
答案 2 :(得分:0)
如果您可以使用已排序,那么这是最简单的方法。如果没有,这是我的解决方案:
lst = [0, 1, 6, 2, 5, 3, 4]
new = lst[1:]
for num in range(len(new)-1, 0, -1):
for i in range(num):
if new[i] > new[i+1]:
new[i], new[i+1] = new[i+1], new[i]
new.insert(0, lst[0])
print(new)