Python 订购';待办事项清单';不带sort()函数
我有如下“待办事项列表”。 我想在“银色级别”、“所需时间”和“传入订单”之后安排“待办事项列表”,而不使用sort()函数Python 订购';待办事项清单';不带sort()函数,python,python-3.x,Python,Python 3.x,我有如下“待办事项列表”。 我想在“银色级别”、“所需时间”和“传入订单”之后安排“待办事项列表”,而不使用sort()函数 # "Argent Level", "The time required" and "Incoming order" work_list = [ "Low_Level, 1, A.Login Error", "High_Level, 3, B.User info Error", "Nomal_L
# "Argent Level", "The time required" and "Incoming order"
work_list = [
"Low_Level, 1, A.Login Error",
"High_Level, 3, B.User info Error",
"Nomal_Level, 1, C.Admin Error",
"Low_Level, 2, D.Icon change of User",
"High_Level, 3, E.Email export Error",
"Nomal_Level, 1, F.Photo size Error",
"High_Level, 2, G.Admin Page Error",
"Nomal_Level, 3, H.Customer Page Error",
"Low_Level, 1, I.Image box Error",
"Nomal_Level, 3, J.Border Error",
"Low_Level, 1, K.Background Color Error",
"High_Level, 2, L.SignUp Error",
]
例如,有如下相同的“高级别”列表
"High_Level, 3, B.User info Error",
"High_Level, 3, E.Email export Error",
"High_Level, 2, G.Admin Page Error",
"High_Level, 2, L.SignUp Error",
首先,我想按“所需时间”的顺序列出下面的列表,如果它们有相同的“所需时间”,下一个顺序是使用大写字母“Incoming order”的Incoming order
我试着编写这样的代码。但这是不正确的。
high_level_list = []
nomal_level_list = []
low_level_list = []
for i in range(0, len(work_list)):
if "High_Level" in work_list[i]:
high_level_list.append(work_list[i])
for i in range(0, len(work_list)):
if "Nomal_Level" in work_list[i]:
nomal_level_list.append(work_list[i])
for i in range(0, len(work_list)):
if "Low_Level" in work_list[i]:
low_level_list.append(work_list[i])
for i in range(0, len(high_level_list)):
if high_level_list[i][1] >= 3:
temp = high_level_list[-1]
high_level_list[-1] = high_level_list[i]
high_level_list[i] = temp
print(high_level_list)
我希望输出如下所示
"High_Level, 2, G.Admin Page Error",
"High_Level, 2, L.SignUp Error",
"High_Level, 3, B.User info Error",
"High_Level, 3, E.Email export Error",
"Nomal_Level, 1, C.Admin Error",
"Nomal_Level, 1, F.Photo size Error",
"Nomal_Level, 3, H.Customer Page Error",
"Nomal_Level, 3, J.Border Error",
"Low_Level, 1, A.Login Error",
"Low_Level, 1, I.Image box Error",
"Low_Level, 1, K.Background Color Error",
"Low_Level, 2, D.Icon change of User",
首先,您需要将
工作列表
转换为元组列表,而不仅仅是字符串,这样您就可以访问各个字段,特别是上一步需要的数字
>>> work_list_tuples = [tuple(s.split(", ")) for s in work_list]
您的第一个循环应该可以工作,但是您可以使它们更紧凑,就像列表理解一样
>>> high = [x for x in work_list_tuples if x[0] == "High_Level"]
您的最后一个循环是一种有缺陷的插入排序,但是您可以使用另一个列表理解来过滤值为3或更高的high
项,而不是试图修复该问题:
>>> high_3 = [x for x in high if int(x[1]) >= 3]
这给你
[('High_Level', '3', 'B.User info Error'),
('High_Level', '3', 'E.Email export Error')]
对normal
和low
级别以及high
低于3的级别执行相同的操作,然后将列表放回一起
>>> high_3 + high_12 + norm + low
[('High_Level', '3', 'B.User info Error'),
...
('High_Level', '2', 'L.SignUp Error'),
...
('Nomal_Level', '1', 'C.Admin Error'),
...
('Low_Level', '1', 'K.Background Color Error')]
然而,在所有远程实际应用中,我强烈建议只使用sort
(列表方法)或sorted
(内置函数)和适当的键函数,例如:
>>> sorted(work_list_tuples, key=lambda x: ("HNL".index(x[0][0]), -int(x[1])))
[('High_Level', '3', 'B.User info Error'),
('High_Level', '3', 'E.Email export Error'),
('High_Level', '2', 'G.Admin Page Error'),
('High_Level', '2', 'L.SignUp Error'),
('Nomal_Level', '3', 'H.Customer Page Error'),
('Nomal_Level', '3', 'J.Border Error'),
('Nomal_Level', '1', 'C.Admin Error'),
('Nomal_Level', '1', 'F.Photo size Error'),
('Low_Level', '2', 'D.Icon change of User'),
('Low_Level', '1', 'A.Login Error'),
('Low_Level', '1', 'I.Image box Error'),
('Low_Level', '1', 'K.Background Color Error')]
这些仅仅是字符串而不是元组,这是故意的吗?另外,为什么不使用排序的
呢?如果有一个结构正确的列表,如[[“低级别,1,a.登录错误”],[“高级别,3,B.用户信息错误”],…]
,这将是微不足道的。@chepner我想改进我的算法背景。这就是我不使用sorted()函数的原因。@tobias_k这不是故意的。我试图从字符串改为整数。像这样的[“High_Level”,2,“G.Admin页面错误”],[“High_Level”,2,“L.SignUp Error”],[“High_Level”,3,“B.User info Error”],[“High_Level”,3,“E.Email export Error”],
谢谢,我只是想让代码没有排序
或排序
功能,我想我能做到。但是,当我查看您的评论时,我意识到使用排序函数或排序函数是更好的方法。但是非常感谢你,根据你的评论,我再次尝试这样做。
>>> sorted(work_list_tuples, key=lambda x: ("HNL".index(x[0][0]), -int(x[1])))
[('High_Level', '3', 'B.User info Error'),
('High_Level', '3', 'E.Email export Error'),
('High_Level', '2', 'G.Admin Page Error'),
('High_Level', '2', 'L.SignUp Error'),
('Nomal_Level', '3', 'H.Customer Page Error'),
('Nomal_Level', '3', 'J.Border Error'),
('Nomal_Level', '1', 'C.Admin Error'),
('Nomal_Level', '1', 'F.Photo size Error'),
('Low_Level', '2', 'D.Icon change of User'),
('Low_Level', '1', 'A.Login Error'),
('Low_Level', '1', 'I.Image box Error'),
('Low_Level', '1', 'K.Background Color Error')]