[英]Python -Is there a way to sort a list of strings which contain a date and time within
[英]How to sort a python list of strings which contain a number in the end
我有一個包含字符串的python列表,但是每個字符串的最后一部分都有一個數字。 我需要以數字遞增的方式對列表進行排序:
[u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']
我使用了sorted()函數,該函數按字母順序對名稱進行排序,但它沒有考慮每個字符串最后一部分的數字。
一種方法是使用key
參數sorted
和自定義lambda
函數。
在這里,我們需要除以.
,取最后一項並轉換為int
。
lst = [u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']
res = sorted(lst, key=lambda x: int(x.rsplit('.', 1)[-1]))
# ['TC ELEVEN. Warning n.1',
# 'TC TWELVE. Warning n.1',
# 'TC ELIAKIM. Warning n.2',
# 'TC DUMAZILE. Warning n.4',
# 'TC HOLA. Warning n.4',
# 'TC ELIAKIM. Warning n.6',
# 'TC DUMAZILE. Warning n.8',
# 'TC HOLA. Warning n.8',
# 'TC ELIAKIM. Warning n.10',
# 'TC DUMAZILE. Warning n.12',
# 'TC ELIAKIM. Warning n.14']
如果需要先按整數排序,然后按字母順序按字符串的開頭部分排序:
def sorter_func(x):
y = x.split('.')
return int(y[-1]), y[0]
res = sorted(lst, key=sorter_func)
# ['TC ELEVEN. Warning n.1',
# 'TC TWELVE. Warning n.1',
# 'TC ELIAKIM. Warning n.2',
# 'TC DUMAZILE. Warning n.4',
# 'TC HOLA. Warning n.4',
# 'TC ELIAKIM. Warning n.6',
# 'TC DUMAZILE. Warning n.8',
# 'TC HOLA. Warning n.8',
# 'TC ELIAKIM. Warning n.10',
# 'TC DUMAZILE. Warning n.12',
# 'TC ELIAKIM. Warning n.14']
相關: 排序列表時嵌套的lambda語句
import re
regex = re.compile('([0-9]+)$')
l = [u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']
print(sorted(l,key=lambda i: int(regex.search(i).groups()[0])))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.