for循环列表

时间:2018-01-24 01:25:19

标签: python list for-loop

我希望获得一个按升序排列的有序列表,但是省略原始列表中的第一个元素。 但是第一个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])

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)