按最小值 Python 对列表列表进行排序



>假设我有以下列表列表:

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

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

预期输出:

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

欢迎任何建议!

使用sortedmin作为键。

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本身作为键,根据最小值排序,然后根据第二个元素进行排序。

a = [[1, 3], [1, 2]]
output = sorted(a, key=sorted)
print(output)  # [[1, 2], [1, 3]]

通过将名为参数的键指定为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]]

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

>>> 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 表达式创建一个匿名函数(不绑定到名称的函数(,该函数接受输入、pair并返回一个列表,首先包含最小值,然后包含最大值。

map函数接受一个函数和一个可迭代对象,并将该函数应用于可迭代对象的每个元素。但是,这样做会生成一个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()

最新更新