Python:使用并行列表排序列表

时间:2011-03-12 17:34:00

标签: python list sorting

我有一个填充HTML元素的列表。我还有一个填充日期/时间的列表,它与HTML列表并行。

如何根据时间/日期列表对HTML列表进行排序?时间/日期采用时间戳格式。

4 个答案:

答案 0 :(得分:18)

您可以使用zip

timestamps, elements = zip(*sorted(zip(timestamps, elements)))

结果将是两个元组,如果您愿意,可以转换为列表。

答案 1 :(得分:7)

将两个列表压缩成元组,排序,然后将HTML从元组中取出:

zipped = zip(timestamps, htmls)
zipped.sort()
sorted_htmls = [html for (timestamp, html) in zipped]

答案 2 :(得分:2)

Enumerate将为您提供列表中每个项目的(索引,项目)元组列表。您可以使用索引对此进行排序,以从时间戳列表中读取排序键。然后剥离html元素:

sorted_elems = [elem for i,elem in sorted(enumerate(html_elements), 
                                          key=lambda x:timestamps[x[0]])]

什么可以更简单?

答案 3 :(得分:0)

您可以使用名为more_itertools的第三方软件包:

import more_itertools 

timestamps = ["08-11-17", "01-13-17", "11-22-17"]
elements = ["<p>", "<b>", "<a href>"]
more_itertools.sort_together([timestamps, elements])
# [('01-13-17', '08-11-17', '11-22-17'), ('<b>', '<p>', '<a href>')]

有关详细信息,请参阅more_itertools docs