Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对包含数字和字符的字符串列表进行排序_Python_String_Sorting_Numbers_Character - Fatal编程技术网

Python 如何对包含数字和字符的字符串列表进行排序

Python 如何对包含数字和字符的字符串列表进行排序,python,string,sorting,numbers,character,Python,String,Sorting,Numbers,Character,我有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()

我有
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'。

使用正则表达式

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']
['1-8', '1-9', '1-10', '1-11', '1-11a', '1-11b', '1-12']
输出:

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']
['1-8', '1-9', '1-10', '1-11', '1-11a', '1-11b', '1-12']

使用
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']

使用
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)
印刷品: