包含整数的列表的Python排序列表和包含整数的字符串

时间:2014-02-27 11:12:29

标签: python list sorting

我如何使用python对列表格式进行排序

format=["12 sheet","4 sheet","48 sheet","6 sheet", "busrear", "phonebox","train"]
像这样

format =["4 sheet", "6 sheet", "12 sheet", "48 sheet", "busrear", "phonebox", "train"]

答案在Python sort array of string with integers inside

但是如果数组是列表列表那么我们怎么能像这样做呢

format=[[1, '12 sheet', 0],[2, '4 sheet', 0], [3, '48 sheet', 0], [4, '6 sheet', 0 [5, 'Busrear', 0], [6, 'phonebox', 0], [7, 'train', 0]]

我需要结果像这样

format=[[2, '4 sheet', 0],[4, '6 sheet', 0],[1, '12 sheet', 0],[3, '48 sheet', 0],[5, 'Busrear', 0], [6, 'phonebox', 0], [7, 'train', 0]]

5 个答案:

答案 0 :(得分:2)

你可以这样做:

lst = [[1L, u'12 sheet', 0],
       [2L, u'4 sheet', 0],
       [3L, u'48 sheet', 0],
       [4L, u'6 sheet', 0],
       [5L, u'Busrear', 0],
       [6L, u'phonebox', 0],
       [7L, u'train', 0]]

def sortby(x):
    try:
        return int(x[1].split(' ')[0])
    except ValueError:
        return float('inf')

lst.sort(key=sortby)
print lst

输出:

[[2L, u'4 sheet', 0], [4L, u'6 sheet', 0], [1L, u'12 sheet', 0], [3L, u'48 sheet', 0], [5L, u'Busrear', 0], [6L, u'phonebox', 0], [7L, u'train', 0]]

您可以随时使用发烧友列表理解,但可读性很重要。这就是为什么你可能不想通过falsetru修改这个稍微改变的任务的酷solution

答案 1 :(得分:1)

您可以使用内置sorted方法对字符串列表进行简单排序。即使列表中的对象更复杂,您仍然可以使用sorted。只需传递一个自定义键参数,即可使用内部列表中的第二项作为排序比较的关键:

result = sorted(format, key=lambda x: x[1])

最后切换到natsorted(来自natsort包)的排序函数,最后得到所需的,自然排序的结果列表:

from natsort import natsorted
result = natsorted(format, key=lambda x: x[1])

答案 2 :(得分:1)

这里可以使用相同的解决方案

print sorted(format_data, key=lambda x: (int(x[1].split(None, 1)[0]) if x[1][:1].isdigit() else 999, x))

请注意x[1]而非xx[1]表示x中的第二个元素。

<强>结果:

[[2, '4 sheet', 0],
 [4, '6 sheet', 0],
 [1, '12 sheet', 0],
 [3, '48 sheet', 0],
 [5, 'Busrear', 0],
 [6, 'phonebox', 0],
 [7, 'train', 0]]

答案 3 :(得分:0)

您可以使用sortedlist.sort

>>> format.sort(key=lambda x: (x[1]))
[[1L, u'12 sheet', 0], [2L, u'4 sheet', 0], [3L, u'48 sheet', 0], [4L, u'6 sheet', 0], [5L, u'Busrear', 0], [6L, u'phonebox', 0], [7L, u'train', 0]]

答案 4 :(得分:0)

a = [5,1,"a","A",2]
a = list(map(int,filter(lambda x:x.isdigit(),sorted(map(str,a)))))+list(filter(lambda x:x.isalpha(),sorted(map(str,a))))
print(a)