请帮我做以下事情:
- 给出一个子列表:[['a',3],['b',5],['c',5]、['d',4]]
- 目标是返回附加了最高值的信件
- 如果出现平局,则返回后者(在上面的列表中,应返回"c"(
目前我有:
nums = []
for i in list:
nums.append(i[1])
while i in list:
if max(nums) == i[1]:
return i[0]
有人能告诉我为什么我看到"命令'['ython3']'在2秒钟后超时"吗?提前感谢!
因为在for
循环结束时,i
等于['d', 4]
。现在你在做while i in list
,也就是True
。自从i[1] == 4 != 5 == max(nums)
以来,我的先生,你有一个无限的循环。
另一种方法是使用内置的max
函数和服装key
来比较第二个元素。然后,为了得到字母,我们将取结果的第一个元素。由于您想返回最后一次出现,我们将检查反向列表(max
返回第一次出现(:
from operator import itemgetter
a = [['a', 3], ['b', 5], ['c', 5], ['d', 4]]
print(max(reversed(a), key=itemgetter(1))[0])
给出:c
按照您最初的思路,首先您可能希望将max
值保存在变量中,因为每次调用max
时都会再次循环列表。然后,将while
更改为for
,并从末尾循环列表以返回最后一次出现的内容。哦,不要把你的名单命名为list
!
def find_max_letter(a):
nums = []
for i in a:
nums.append(i[1])
# you can also create this with list-comprehension: nums = [i[1] for i in list]
max_num = max(nums)
for i in a[::-1]:
if max_num == i[1]:
return i[0]