在列表中排序列表

时间:2017-01-13 17:21:15

标签: python python-3.x

是否有一种简单的方法可以对列表中的列表进行排序,使值从最小到最大,反之亦然?到目前为止,我只能找到有关根据主要价值排序列表的信息。

以下是一个例子:

data = [[8,7], [10,5,], [8,10]]

>> [[7,8], [5,10], [8,10]

3 个答案:

答案 0 :(得分:10)

使用列表推导对list中的每个元素(每个data对象)进行排序:

data = [sorted(x) for x in data]

data现在是:

[[7, 8], [5, 10], [8, 10]]

你也可以这样做:

map(sorted, data)

然后在list对象上使用map实际将其转换为列表...

答案 1 :(得分:5)

您拥有的是列表列表,此处不涉及元组,您也可以使用内置方法mapsorted的组合来实现:

>>> data = [[8,7], [10,5,], [8,10]]
>>> 
>>> list(map(sorted, data))
[[7, 8], [5, 10], [8, 10]]

在Python3中,map返回一个迭代器,所以如果你需要它作为一个列表,你需要用list将它转换回来,否则,如果你在一个循环中使用它,那么就不需要了将其转换为列表。它以这种方式节省了内存。

编辑:

回复您的评论,您可以执行以下操作:

>>> def f(lst):
        lst = sorted(lst)
        return(lst[0], lst)

>>> print(*map(f, data))
(7, [7, 8]) (5, [5, 10]) (8, [8, 10])

或者更紧凑但可读性更低:

>>> print(*map(lambda lst: '{} - {}'.format(lst[0], lst), map(sorted, data)), sep='\n')
7 - [7, 8]
5 - [5, 10]
8 - [8, 10]

答案 2 :(得分:1)

它取决于您是否想要就地订购它们或者您想要一个带有列表订货人的新副本

对于新副本,另一个答案已经告诉你如何,例如

data = [[8,7], [10,5], [8,10]]
new = [ sorted(elem) for elem in data ]
print(new)

对于就地排序,请使用for循环并在其上调用.sort

data = [[8,7], [10,5], [8,10]]
for elem in data:
    elem.sort()
print(data)