在 python 中对多维列表进行排序

sorting multidimensional lists in python

a = ["1", "11.1", "1.11.1", ".1", "2", "2.2", "2.1.9", "2.2.1", "1.2", "1.01.1"]
b = []

for x in a:
    y = x.split(".")
    b.append(y)
    
j = sorted(b)

for jj in j:
    print (jj)

结果:

['', '1']
['1']
['1', '01', '1']
['1', '11', '1']
['1', '2']
['11', '1']
['2']
['2', '1', '9']
['2', '2']
['2', '2', '1']

所需的输出应该是:

['', '1']
['1']
['1', '01', '1']
['1', '11', '1']
['1', '2']
['2']
['2', '1', '9']
['2', '2']
['2', '2', '1']
['11', '1']

第一个输出的问题是11不大于2,所以列表乱序了。 正确或所需的顺序是第二个输出。

我不知道解决方案是否需要以某种方式在其他数字之前加上 0。

原因似乎是因为数据是字符串格式。要按照您要查找的方式对其进行排序,请将每个元素转换为 int,然后进行排序。您可以通过像这样更新代码来获得它...

def to_int(val):
    try:
        return int(val)
    except ValueError:
        return 0
    
a = ["1", "11.1", "1.11.1", ".1", "2", "2.2", "2.1.9", "2.2.1", "1.2", "1.01.1"]
b = []

for x in a:
    y = x.split(".")
    y = [to_int(x) for x in y]
    b.append(y)
    
j = sorted(b)

for jj in j:
    print (jj)