为了账号安全,请及时绑定邮箱和手机立即绑定

先按字母顺序排序列表,然后再按数字排序?

先按字母顺序排序列表,然后再按数字排序?

尚方宝剑之说 2022-11-24 15:20:03

如何在 Python 中先按字母顺序然后按数字对字符串列表进行排序?

例如:

Given list: li = ['4', '1', '3', '9', 'Z', 'P', 'V', 'A']

排序后我想要以下输出:

sorted_list = ['A', 'P', 'V', 'Z', '1', '3', '4', '9']


查看完整描述

4 回答

?
慕桂英4014372

TA贡献1604条经验 获得超13个赞

sorted(sorted_list, key=lambda x: (x.isnumeric(),int(x) if x.isnumeric() else x))

这也按整数的值排序


查看完整回答
反对 回复 2022-11-24
?
翻翻过去那场雪

TA贡献1776条经验 获得超13个赞

你可以试试这个。可以通过使用来实现所需的输出str.isdigit


sorted(l,key=lambda x:(x.isdigit(),x))

# ['A', 'P', 'V', 'Z', '1', '3', '4', '9']

注意:此解决方案不处理多于一个的数字。请看一下@Martin 的回答。


查看完整回答
反对 回复 2022-11-24
?
慕尼黑的夜晚无繁华

TA贡献1567条经验 获得超6个赞

如果你想让它考虑负数、小数和小写字母:


li = ['A', 'b', '-400', '1.3', '10', '42', 'V', 'z']


threshold = abs(min(float(x) for x in li if not x.isalpha())) +  ord('z') + 1

sorted_list = sorted(li,

                     key=lambda x: ord(x) if x.isalpha() else threshold + float(x))

sorted_list:


['A', 'V', 'b', 'z', '-400', '1.3', '10', '42']


查看完整回答
反对 回复 2022-11-24
?
有只小跳蛙

TA贡献1542条经验 获得超7个赞

list1 = ['4', '1', '3', '9', 'Z', 'P', 'V', 'A']

number = []

alphabet = []

for l in list1:

    if l.isnumeric():

        number.append(l)

    else:

        alphabet.append(l)


number = sorted(number)

alphabet = sorted(alphabet)

list1 = alphabet + number

print(list1)

输出

//img1.sycdn.imooc.com/637f1b4e0001c75d04400062.jpg

查看完整回答
反对 回复 2022-11-24

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信