假设我有以下列表清单:
A = [[42, 45], [45, 48], [48, 51], [0, 4], [4, 8]]
我需要根据每个子列表的最小值来排序A列表中的子列表。
预期产出:
A = [[0, 4],[4, 8], [42, 45], [45, 48], [48, 51]]
欢迎任何建议!
答案 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)
通过为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]]
答案 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()