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

16

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

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

4个回答

24

你可以使用zip函数。

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

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


@Thomas — 不要难过!sort()是原地排序,而sorted()则创建一个新列表,所以对于大列表来说,通常你需要使用sort()。 :-) - Ben Blank
谢谢。反过来呢? - Zeno
同一个函数既可以压缩值,也可以解压缩值,这非常奇怪。这使得理解函数变得困难。 - canbax
zip不会解压缩,但*会解包已排序的zip对象,然后再由zip重新压缩。 - Epsilon

8
将这两个列表合并为元组,进行排序,然后将HTML从元组中取出:
zipped = zip(timestamps, htmls)
zipped.sort()
sorted_htmls = [html for (timestamp, html) in zipped]

2

使用枚举函数可以为列表中的每个元素提供一个(index, item)元组列表。您可以使用索引从时间戳列表中读取排序关键字,然后去除HTML元素:

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

什么可以更简单?

1
你可以使用一个名为 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>')]

请参阅{{link1:more_itertools文档}}以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接