【发布时间】:2021-04-18 07:54:35
【问题描述】:
我有一个元组列表,看起来像这样:
lst = [(2921, 'string', 1, 1, 7), (2922, 'string', 2, 1, 1), (2923, 'string', 3, 1, 4),
(2924, 'string', 4, 2, 2), (2925, 'string', 5, 2, 3), (2926, 'string', 6, 2, 5),
(2927, 'string', 7, 2, 3), (2928, 'string', 8, 3, 4), (2929, 'string', 9, 3, 4),
(2930, 'string', 10, 3, 5), (2931, 'string', 11, 3, 5), (2932, 'string', 12, 4, 6),
(2933, 'string', 13, 4, 6), (2934, 'string', 14, 4, 7), (2935, 'string', 15, 7, 1),
(2936, 'string', 16, 5, 1), (2937, 'string', 17, 5, 2)]
每个元组中的最后一个元素(第五项)对应于星期几,编号为 1 到 7。
我会对列表进行排序,以便生成的元组按升序在一周中的天数中循环,如下所示:
- 用 1 选择第一个元组,然后用 2 选择第一个元组,直到 7(如果没有具有该编号的元组,则跳过编号)
- 用 2 选择第二个元组,然后用 3 选择第二个元组,直到再次达到 7。
- 继续这个循环过程(即第一个、第二个、第三个等),直到用完元组。
期望的输出:
(2922, 'string', 2, 1, 1)
(2924, 'string', 4, 2, 2)
(2925, 'string', 5, 2, 3)
(2923, 'string', 3, 1, 4)
(2926, 'string', 6, 2, 5)
(2932, 'string', 12, 4, 6)
(2921, 'string', 1, 1, 7)
(2935, 'string', 15, 7, 1)
(2937, 'string', 17, 5, 2)
(2927, 'string', 7, 2, 3)
(2928, 'string', 8, 3, 4)
(2930, 'string', 10, 3, 5)
(2933, 'string', 13, 4, 6)
(2934, 'string', 14, 4, 7)
(2936, 'string', 16, 5, 1)
(2929, 'string', 9, 3, 4)
(2931, 'string', 11, 3, 5)
我尝试使用自定义排序功能,但它没有按我的需要工作:
days = [1, 2, 3, 4, 5, 6, 7]
sorted_list = sorted(list, key=lambda x: (x[4], days.index))
for i in sorted_list:
print(i)
也许“排序”实际上并不是正确的术语。无论如何,我想根据元组的第五个元素对列表元素进行排序。我想像工作日一样订购它们:从周一到周日,周日之后又是周一。所以,从 1 到 7,然后再从 1 到 7。像这样:1、2、3、4、5、6、7、1、2、3、4、5、6、7、1、2 ...
不是 1、1、2、2、2、3、3 ...
【问题讨论】:
-
1.你的 lambda 中的“days.index”是什么意思(没有参数的.index)? 2. 为什么你首先需要它。您的“天”列表已排序值。
-
不要将您的列表命名为“列表”。这应该是一个保留字,是混淆的根源。至于排序 - 你必须清楚你想要什么。假设您有一个工作日列表,即 [1,1,2,2,3,4,5,3,2]。你期望什么输出?
-
你想要的输出没有排序 - 为什么
(2935, 'string', 15, 7, 1),在(2921, 'string', 1, 1, 7)之后等等...... -
您在 12 小时前问了几乎完全相同的问题。不要重新发布已关闭的问题,而是尝试通读How to Ask 并将其编辑成形状。 “但它没有按我的需要工作”不足以作为问题描述
-
@PaulUheet 查看解决方案并让我知道任何其他问题,请按照所有必要的指南提出问题
标签: python python-3.x list sorting