Python sorted()数据排序,当需要将按照指定规则将数据排序时,有两种方法可用。可以创建列表对象,然后用list.sort()
方法将这个列表排序。或者选用sorted()
函数,可以用它处理任何可迭代对象,返回排序后的列表对象。
sorted()
函数有两种用法:直接应用于集合,或者作为高阶函数使用key
参数定制排序方法。
下面处理前面的旅行数据。之前编写的函数生成了一个由起点、终点和距离组成的三元组序列,代表旅行线路,数据如下所示:
(
((37.54901619777347, -76.33029518659048), (37.840832, -76.273834), 17.7246),
((37.840832, -76.273834), (38.331501, -76.459503), 30.7382),
((38.331501, -76.459503), (38.845501, -76.537331), 31.0756),
((36.843334, -76.298668), (37.549, -76.331169), 42.3962),
((37.549, -76.331169), (38.330166, -76.458504), 47.2866),
((38.330166, -76.458504), (38.976334, -76.473503), 38.8019)
)
使用如下交互式命令行查看sorted()
函数的默认行为:
>>> sorted(dist(x) for x in trip)
[0.1731, 0.1898, 1.4235, 4.3155, ... 86.2095, 115.1751, 129.7748]
这里首先使用生成器表达式(dist(x) for x in trip)
从旅行数据从提取距离信息,然后将生成的可迭代对象排序,得到了从约0.17海里到约129.77海里的距离序列。
如果想在返回结果中保留起点、终点和距离,即原来的三元组形式,可以使用sorted()
函数并结合key
函数指明排序的方式,如下所示:
>>> sorted(trip, key=dist)
[
((35.505665, -76.653664), (35.508335, -76.654999), 0.1731),
((35.028175, -76.682495), (35.031334, -76.682663), 0.1898),
((27.154167, -80.195663), (29.195168, -81.002998), 129.7748)
]
这样就按照距离把旅行数据排序好了,其中排序函数dist
如下所示:
dist = lambda leg: leg[2]
这个例子很好地展示了可以使用匿名函数从复杂元组中提取待排序数据。