【发布时间】:2021-02-15 21:51:19
【问题描述】:
如果我在括号中有以下嵌套列表:
[('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
如何从列表中返回最大值和对应的名称?
期望的输出:
('Peter', '10')
我试过max(list, key=itemgetter(1))[0],但没有成功。
【问题讨论】:
-
把你的'8'、'10'和'0'改成整数
如果我在括号中有以下嵌套列表:
[('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
如何从列表中返回最大值和对应的名称?
期望的输出:
('Peter', '10')
我试过max(list, key=itemgetter(1))[0],但没有成功。
【问题讨论】:
只需将关键字段转换为 int
data = [('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
mx = max(data, key=lambda e: int(e[1]))
print(mx)
输出
('Peter', '10')
【讨论】:
试试这个功能。它将与您的示例格式相同的列表作为输入,并返回具有最大数字的元素。
def findMax (names): #names = [('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
numbers = [] #list for storing the numbers
for i in names:
numbers.append (int (i [1]))
return names [numbers.index (max (numbers))] #search the max value in numbers and print the names element with the same index
【讨论】:
如果你想使用operator.itemgetter,你应该将每个元组的第二项转换为int:
>>> from operator import itemgetter
>>> lst = [('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
>>> max(((k, int(v)) for k, v in lst), key=itemgetter(1))
('Peter', 10)
默认情况下,字符串按lexographical 排序进行比较,因此在这种情况下需要进行int 转换。您可以通过执行'8' > '10' 来测试它并看到它返回True。您可以阅读docs 了解更多信息。
【讨论】: