给定一个人的列表,按随机顺序,我需要编写一个函数来对人进行排序并按顺序返回一个列表,而老年人则位于列表的前面。如果我的输入为[("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
。我的代码中的错误在哪里,我该如何纠正?
答案 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
请注意,我正在复制原始列表,以确保该功能返回一个新列表,而不仅仅是清空原始列表。
我希望这会有所帮助