在 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)
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)