根据字符串中的数字对字符串列表进行排序

2024-10-02 00:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有列表

my_list= ['image101.jpg', 'image2.jpg', 'image1.jpg']

以及

^{pr2}$

给了我

['image1.jpg', 'image101.jpg', 'image2.jpg']

但我当然需要

['image1.jpg', 'image2.jpg', 'image101.jpg']

怎么做?在


Tags: 列表mylistjpgpr2image1image2image101
3条回答

实际上你不需要任何regexpatern。你可以像那样很容易地解析。在

>>> 'image101.jpg'[5:-4]
'101'

解决方案:

^{pr2}$

使用正则表达式从字符串中提取数字并转换为int:

import  re
r = re.compile("\d+")
l = my_list= ['image101.jpg', 'image2.jpg', 'image1.jpg']
l.sort(key=lambda x: int(r.search(x).group()))

或者使用更具体的正则表达式,包括.

^{pr2}$

两者都为示例输入提供相同的输出:

['image1.jpg', 'image2.jpg', 'image101.jpg']

如果确定扩展名,可以使用非常特定的正则表达式:

 r = re.compile("(\d+)\.jpg$")
 l.sort(key=lambda x: int(r.search(x).group(1)))

^{}接受可选的key函数。每个项都传递给函数,函数的返回值用于比较项而不是原始值。在

>>> my_list= ['image101.jpg', 'image2.jpg', 'image1.jpg']
>>> my_list.sort(key=lambda x: int(''.join(filter(str.isdigit, x))))
>>> my_list
['image1.jpg', 'image2.jpg', 'image101.jpg']

^{}^{}用于提取数字:

^{pr2}$
  • ^在python2.x中不需要{}

相关问题 更多 >

    热门问题