>假设我有以下列表列表:
A = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]]
我需要根据每个子列表的最小值对 A 列表中的子列表进行排序。
预期输出:
A = [[0, 4],[4, 8], [42, 45], [45, 48], [48, 51]]
欢迎任何建议!
使用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
本身作为键,根据最小值排序,然后根据第二个元素进行排序。
a = [[1, 3], [1, 2]]
output = sorted(a, key=sorted)
print(output) # [[1, 2], [1, 3]]
通过将名为参数的键指定为sort
或sorted
,您可以执行以下操作:
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()