我有一个应该这样排序的list = ['1-10', '1-9', '1-8', '1-11a', '1-12', '1-11b', '1-11']:
sortedlist = ['1-8', '1-9', '1-10', '1-11', '1-11a', '1-11b', '1-12'].我该怎么做呢?
我可以通过split方法来分隔字符串,以便只关心-之后的内容。
list.sort(key=lambda a: a.split('-')[1])但是1-10,1-11等等都在1-8之前。我不能使用int(),因为有'a‘和'b’。
发布于 2019-06-07 16:51:45
使用正则表达式。
Ex:
import re
l = ['1-10', '1-9', '1-8', '1-11a', '1-12', '1-11b', '1-11']
l.sort(key=lambda a: (int(re.search(r"\-(\d+)[a-z]*", a).group(1)), re.search(r"\-\d+([a-z]*)", a).group(1)))
print(l)输出:
['1-8', '1-9', '1-10', '1-11', '1-11a', '1-11b', '1-12']发布于 2019-06-07 16:54:50
使用lambda中的元组作为key参数:
import re
lst = ['1-10', '1-9', '1-8', '1-11a', '1-12', '1-11b', '1-11']
lst.sort(key=lambda a: (int(re.search(r'\d+', a.split('-')[1]).group()), len(a)))
print(lst)
# ['1-8', '1-9', '1-10', '1-11', '1-11a', '1-11b', '1-12']发布于 2019-06-07 17:07:02
使用re模块:
import re
l = ['1-10', '1-9', '1-8', '1-11a', '1-12', '1-11b', '1-11']
j = [l[i[0]]
for i in sorted(
[(i2, *g)
for i2, i in enumerate(l)
for g in re.findall(r'(\d+)-(\d+)(\w?)', i)],
key=lambda k: (int(k[1]), int(k[2]), k[3]))]
print(j)打印:
['1-8', '1-9', '1-10', '1-11', '1-11a', '1-11b', '1-12']https://stackoverflow.com/questions/56490906
复制相似问题