按最小值Python排序列表列表

时间:2018-06-08 04:30:28

标签: python list sorting

假设我有以下列表清单:

A = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]]

我需要根据每个子列表的最小值来排序A列表中的子列表。

预期产出:

A = [[0, 4],[4, 8], [42, 45], [45, 48], [48, 51]]

欢迎任何建议!

3 个答案:

答案 0 :(得分:3)

使用sorted作为键{。}}。

min

如果你想要一种非歧义的方式来打破关系,你可以使用a = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]] output = sorted(a, key=min) print(output) # [[0, 4], [4, 8], [42, 45], [45, 48], [48, 51]] 本身作为键来根据最小值然后第二个元素进行排序。

sorted

答案 1 :(得分:1)

通过为sortsorted指定名为参数的键,您可以执行此操作:

A = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]]

# Creating a new list
B = sorted(A, key = lambda x: min(x))
print(B)

# Operating on the original list
A.sort(key = lambda x: min(x))
print(A)

两个输出:[[0, 4], [4, 8], [42, 45], [45, 48], [48, 51]]

答案 2 :(得分:0)

嗯,我刚刚检查过,似乎有一个更简单的解决方案。

>>> a = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]]
>>> a.sort()
>>> a
[[0, 4], [4, 8], [42, 45], [45, 48], [48, 51]]

编辑:

如果您还想对子列表进行排序,可以使用:

>>> a = [[45, 42], [45, 48], [51, 48], [0, 4], [8, 4]] # swapped some values
>>> a = list(map(lambda pair : [min(pair), max(pair)], a))
>>> a.sort()
>>> a
[[0, 4], [4, 8], [42, 45], [45, 48], [48, 51]]

lambda表达式创建一个anonymous function(一个与名称无关的函数),它接受一个输入pair,并返回一个首先包含最小值的列表,然后是最大的价值。

map函数接受一个函数和一个iterable,并将该函数应用于iterable的每个元素。这样做会产生一个map对象,所以我们将它变回一个列表。

之后,应该对子列表进行排序,因此我们可以像第一个示例中那样调用sort()方法。

这与此代码大致相同:

a = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]]
newA = []
for element in a:
     newA.append([min(element), max(element)])
a = newA
a.sort()