是否有一种简单的方法可以对列表中的列表进行排序,使值从最小到最大,反之亦然?到目前为止,我只能找到有关根据主要价值排序列表的信息。
以下是一个例子:
data = [[8,7], [10,5,], [8,10]]
>> [[7,8], [5,10], [8,10]
答案 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)
您拥有的是列表列表,此处不涉及元组,您也可以使用内置方法map
和sorted
的组合来实现:
>>> 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)