python - 从 Python 中的字母数字字符串列表中执行降序数字排序,然后升序字母排序

标签 python sorting

我有一个字符串列表,我想对其执行降序数字排序,然后按字母升序排序。

例如,需要对以下列表进行排序:

['120d', '120a', '1080p', '1080a', '696p', '696z']

想要的输出是什么:

['1080a', '1080p', '696p', '696z', '120a', '120d']

当我使用python的排序函数时我得到什么:

['1080a', '1080p', '120a', '120d', '696p', '696z']

使用natsorted时我得到什么(来自这篇文章)python的函数:

['120a', '120d', '696p', '696z', '1080a', '1080p']

如果有人可以帮助我或引导我走上正确的道路,我会很高兴。谢谢

简化代码:

from natsort import natsorted

f = ['120d', '120a', '1080p', '1080a', '696p', '696z']
print ("ACTUAL:")
print (f)
print ()

f_sorted = sorted(f)
print ("SORTED:")
print (f_sorted)
print ()

f_natsorted = natsorted(f)
print ("NATSORTED:")
print (f_sorted)
print ()

desired = ['1080a', '1080p', '696p', '696z', '120a', '120d']
print ("WANTED:")
print (desired)

最佳答案

如果非数字部分的大小并不总是相同(甚至不存在):

import re 
def na_split(s):
    # Split the string into leading numeric & rest
    n,s = re.fullmatch('^([0-9]+)(.*)$',s).groups()
    return (-int(n),s)
data = ['120d', '120a', '1080p', '1080a', '696p', '696z', '480', '480a', '480p']
print(sorted(data,key=lambda x:na_split(x)))

>> ['1080a', '1080p', '696p', '696z', '480', '480a', '480p', '120a', '120d']

关于python - 从 Python 中的字母数字字符串列表中执行降序数字排序,然后升序字母排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68469623/

相关文章:

python - 关闭 Nose 测试中的覆盖范围

python - 在 argparse 中使用变量 arg 名称

MySQL:在 '1st' 之前对 '101st' 进行排序

jquery - 按数组元素重新排列二维数组

python - Pandas 数据框和计数中选定列中值的唯一组合

Python 数组加法递归

python - 如何检测并绘制 asc 文件的强度

mysql - 在mysql select语句中将公共(public)列值作为所有结果的标题

swift - 按键排序词典

javascript - 按属性对 jQuery 结果进行排序?