排序列表而不依赖.sort或排序函数(Python 3.6)

时间:2017-07-18 13:34:36

标签: python-3.x sorting

给定一个人的列表,按随机顺序,我需要编写一个函数来对人进行排序并按顺序返回一个列表,而老年人则位于列表的前面。如果我的输入为[("M" , 23), ("F" , 19), ("M" , 30)],我的函数应返回[("M", 30), ("M", 23), ("F", 19)]。我的功能如下:

def sort_age(lst):
    new_lst=[]
    while lst:
        max_age = lst[0][1]
        oldest = lst[0]
        counter = len(lst)-1
        while counter > 0:
            if lst[counter][1] > max_age:
                max_age = lst[counter][1]
                oldest = lst[counter]
                counter-=1
            lst.remove(oldest)
            new_lst.append(oldest)
    return new_lst

Python IDLE抛出ValueError: list.remove(x): x not in list。我的代码中的错误在哪里,我该如何纠正?

2 个答案:

答案 0 :(得分:0)

        lst.remove(oldest)
        new_lst.append(oldest)

过多地缩进。

答案 1 :(得分:0)

我会使用内置driver.switchTo.frame("Frame_ID"); 来避免重新发明轮子:

sorted

但是如果你想编写一个sort函数,那么你应该重写该函数看起来类似于以下内容:

lst = [("M" , 23), ("F" , 19), ("M" , 30)]
print(sorted(lst, key=lambda x: x[1], reverse=True))

# [('M', 30), ('M', 23), ('F', 19)]

有一点可以帮助您弄清楚为什么抛出def sort_by_age(local_lst): local_lst = local_lst[:] output = [] while True: if len(local_lst) == 0: break oldest = local_lst[0] max_age = oldest[1] for tpl in local_lst[:]: if tpl[1] > max_age: max_age = tpl[1] oldest = tpl output.append(oldest) local_lst.remove(oldest) return output lst = [("M" , 23), ("F" , 19), ("M" , 30)] print(sort_by_age(lst)) # [('M', 30), ('M', 23), ('F', 19)] 异常主要是ValueError.append操作是在第二个.remove内完成的。这实际上是在它到达第一个while loop的第二次迭代之前清空列表。由于第二个while loop用于确定当前while loop的内容,因此最好将max_age.append操作移到循环外部,以便删除实际值max tuple。

以下是您最接近的内容:

.remove

请注意,我正在复制原始列表,以确保该功能返回一个新列表,而不仅仅是清空原始列表。

我希望这会有所帮助