排序后选择嵌套列表的最小值元素

时间:2018-08-29 20:02:58

标签: python python-3.x

我想选择第二个元素(浮动部分)的嵌套列表的最小值。

代码

n=int(input("Enter the number: "))
arr=[[input(),float(input())] for _ in range(0,n)]
arr.sort(key=lambda x: (x[1],x[0]))
min_val=min(arr)
print(min_val)

输入

Enter the number: 3
arp
5
grp
4
drp
3

输出

['arp', 5.0]

预期产量

['drp',3.0]

3 个答案:

答案 0 :(得分:3)

您可以通过以下方式计算最小值:

n = int(input("Enter the number: "))
arr = [[input(),float(input())] for _ in range(0,n)]
arr.sort(key=lambda x: (x[1],x[0]))
min_val=min(arr)
print(min_val)

这意味着您将在列表上执行循环,并获取最小的元素。由于您没有提供键,Python会像默认情况下那样对元组进行排序:首先按第一个元素排序,如果出现并列,则按第二个元素排序,依此类推。

如果要根据特定键获取最小值,则需要使用key函数的min参数

n = int(input("Enter the number: "))
arr = [[input(),float(input())] for _ in range(0,n)]
min_val=min(arr, key=lambda x: (x[1],x[0]))
print(min_val)

请注意,获取最小通常比排序列表要快。如果您不需要对列表进行排序,则可以将其删除,只需使用min(..)(如此处所示)即可。

如果仍然需要对列表进行排序,则最小的元素是列表的第一个元素,因此您可以使用以下方法获取它:

n = int(input("Enter the number: "))
arr = [[input(),float(input())] for _ in range(0,n)]
arr.sort(key=lambda x: (x[1],x[0]))
min_val=arr[0]
print(min_val)

答案 1 :(得分:1)

按照威廉·范·昂塞姆(Willem Van Onsem)的建议,使用带有键的min并将其应用于序列:

arr=[("a",2),("b","5"),("c",1),("a",2),("b","5"),("c",1)]  
# get minimal value
min_val=min(arr, key= lambda x:(x[1],x[0]))
# filter all with 2nd element euqal to minimals 2nd elemenbt
withoutMin = filter(lambda x: x[1] != min_val[1], arr)

# or use equivalent list comp:
# without = [x for x in arr if x[1] != min_val[x]] 
print(arr)

print(withoutMin)

输出:

[('a', 2), ('b', '5'), ('c', 1), ('a', 2), ('b', '5'), ('c', 1)]
[('a', 2), ('b', '5'), ('a', 2), ('b', '5')] # filtered

答案 2 :(得分:0)

因为数组已经排序:

print(arr[0])

OR

min_val=min(arr)

将按第一个元素排序。要按第二个元素排序,请将其更改为:

min_val=min(arr, key = lambda t: t[1])