假设,我们有如下一个字符串列表数据:
# 排序前
items = ["36.1266392071335 215-08-30T13:02:4.500+0800 117.469 34.480",
"12.1266392071335 2017-08-30T13:02:4.500+0800 117.469 34.480",
"7.1266392071335 2019-08-30T13:02:4.500+0800 117.469 34.480",
"214.1266392071335 2011-08-30T13:02:4.500+0800 117.469 34.480",
]
# 排序后
result= [
"7.1266392071335 2019-08-30T13:02:4.500+0800 117.469 34.480",
"12.1266392071335 2017-08-30T13:02:4.500+0800 117.469 34.480",
"36.1266392071335 215-08-30T13:02:4.500+0800 117.469 34.480",
"214.1266392071335 2011-08-30T13:02:4.500+0800 117.469 34.480",
]
其中,每一条item,都存放了地震的信息,【距离,时间,经度,纬度】
假设,我们想要以距离进行升序排序,有两种风法:
方法一
items = ["36.1266392071335 215-08-30T13:02:4.500+0800 117.469 34.480",
"12.1266392071335 2017-08-30T13:02:4.500+0800 117.469 34.480",
"7.1266392071335 2019-08-30T13:02:4.500+0800 117.469 34.480",
"214.1266392071335 2011-08-30T13:02:4.500+0800 117.469 34.480",
]
items.sort()
print(items)
num = [36.1266392071335,12.1266392071335,7.1266392071335,214.1266392071335 ]
strings = ["215-08-30T13:02:4.500+0800 117.469 34.480",
"2017-08-30T13:02:4.500+0800 117.469 34.480",
"2019-08-30T13:02:4.500+0800 117.469 34.480",
"2011-08-30T13:02:4.500+0800 117.469 34.480",
]
print(num)
# print(strings)
nums = sorted(num)
print(nums)
print("==========================查看数据=========================================")
for i in range(len(num)):
print(nums.index(num[i]))
print(str(num[nums.index(num[i])]) + "\t"+strings[nums.index(num[i])])
这种方法是先将字段分开,首先对距离进行排序,然后根据距离排序后的列表,去查找没排序的列表,获取到下标,再将字符串和数字进行拼接,即可。
方法二
利用正则表达式。
items = ["36.1266392071335 215-08-30T13:02:4.500+0800 117.469 34.480",
"12.1266392071335 2017-08-30T13:02:4.500+0800 117.469 34.480",
"7.1266392071335 2019-08-30T13:02:4.500+0800 117.469 34.480",
"214.1266392071335 2011-08-30T13:02:4.500+0800 117.469 34.480",
]
import re
com = re.compile(r'\d+\.\d+')
print(re.findall(com, items[0])[0])
print(sorted(items, key=lambda item: float(re.findall(com,item)[0]) ))
我们利用re.compile生成一个正则表达式规则:查看数字.数字,可以获取到所有的规则,然后我们取下标0,即可取到距离数据。使用sorted函数对数据进行排序,返回排序后的元素。结果如下: