繁体   English   中英

Python:排序元组列表时的决胜局(第一个元素的最大值,第二个元素的第一次出现)

[英]Python: Tie breaker when sorting a list of tuples (max for first element, and 1st occurrence of the second)

这是我开始的清单

names = ["Alice", "Beatrice", "Amarnae", "Zootrope"]

最后三项各有 4 个元音

根据元音计数创建一个排序列表。 得到了下图

mylist = [(3, 'Alice'), (4, 'Amarnae'), (4, 'Beatrice'), (4, 'Zootrope')]

我需要返回/查找第一次出现的最大数量

print(max(mylist))

返回

(4, 'Zootrope')

问:我需要返回,因为这是原始列表中第一次出现的名称

(4, 'Beatrice')

我尝试了一些不同的东西(包括mylist.sort(key = lambda x: (x[0], x[1]) .. 但似乎不起作用。

您的mylist不是在最初保留原始项目订单的情况下创建的,因此存在问题。

您可以使用这样的列表理解来创建mylist

mylist = [(sum(c in 'aeiou' for c in name.lower()), name) for name in names]

这导致mylist的以下值,保留原始项目顺序:

[(3, 'Alice'), (4, 'Beatrice'), (4, 'Amarnae'), (4, 'Zootrope')]

由于max返回具有最大值的第一项,因此您可以简单地将maxkey function 一起使用,该键仅返回元组中的第一项进行比较,因为您不希望考虑第二项的字典顺序帐户:

max(mylist, key=lambda t: t[0])

返回:

(4, 'Beatrice')

演示: https://replit.com/@blhsing/SwelteringFlakyDividend

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM