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

问题描述 投票: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)

输入

Enter the number: 3
arp
5
grp
4
drp
3

产量

['arp', 5.0]

预期产出

['drp',3.0]
python python-3.x
3个回答
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
投票

如Willem Van Onsem所建议的那样使用min with key并对您的序列应用过滤器:

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

0
投票

因为数组已经排序:

print(arr[0])

要么

min_val=min(arr)

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

min_val=min(arr, key = lambda t: t[1])
© www.soinside.com 2019 - 2024. All rights reserved.