我有一个字符串列表,我想对其执行降序数字排序,然后按字母升序排序。
例如,需要对以下列表进行排序:
['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/