如何在python中对字母数字列表进行排序

2024-04-28 19:00:33 发布

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

我有一份清单

a = [["1", "ok", "na"], ["15", "asd", "asdasd"], ["100", "uhu", "plo"], ["10", "iju", "tlo"], ["ISC_1", "des", "det"], ["12", "asd", "assrg"], ["ARF", "asd", "rf"]]

我想把这份名单整理如下:

^{pr2}$

我用过a.sort()

结果如下:

[['1', 'ok', 'na'], ['10', 'iju', 'tlo'], ['100', 'uhu', 'plo'], ['12', 'asd', 'assrg'], ['15', 'asd', 'asdasd'], ['ARF', 'asd', 'rf'], ['ISC_1', 'des', 'det']]

在这种情况下,请帮我分类。在


Tags: okiscdetnadesrf名单arf
3条回答

准备好使用非数字值

a.sort(key = lambda l: int(l[0]) if l[0].isnumeric() else 99999)
# or
b=sorted(a,key = lambda l: int(l[0]) if l[0].isnumeric() else 99999)

查看非数字姓氏或

^{pr2}$

先看看他们

您可以使用key命名参数。
它接受一个函数,该函数返回排序函数用来比较项目的值。在

sorted(a, key = lambda l: int(l[0]))

您可以使用一个自然的排序键,非常容易用正则表达式re.split()进行设置

import re
try:
    # fast string checking and conversion
    from fastnumbers import *
except:
    pass

def natural_sort_key_for_list_of_lists(sublist):
    return [int(element) if element.isdigit() else element
            for element in re.split("([0-9]+)",sublist[0])]
    # put whichever index of the sublist you want here ^

a = [["1", "ok", "na"],
     ["15", "asd", "asdasd"],
     ["100", "uhu", "plo"],
     ["10", "iju", "tlo"],
     ["ISC_1", "des", "det"],
     ["12", "asd", "assrg"],
     ["ARF", "asd", "rf"]]

a.sort(key=natural_sort_key_for_list_of_lists)

for l in a:
    print (l)

结果:

^{pr2}$

相关问题 更多 >