gpt4 book ai didi

相对于彼此的 Python 过滤器列表项

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:57 25 4
gpt4 key购买 nike

假设我有一个元组列表:

fruits = [('apple','red',23),
('apple','green',12),
('orange','small',12),
('orange','large',1)]

我如何快速干净地创建一个新列表,其中包含数字最大但水果名称唯一的元组。所以理想的结果是:

fruits = [('apple','red',23),
('orange','small',12)]

我目前的方法是这样的:

def check_fruit(fruit, a_list):
for item in a_list:
if fruit[0] == item[0] and fruit[2] < item[2]:
return False
return True
filtered_list = [fruit for fruit in fruits if check_fruit(fruit, fruits)]

如果有更好的方法请告诉我!谢谢。

最佳答案

如果您的 fruits 列表已经按水果排序,请使用 itertools.groupby:

from itertools import groupby
from operator import itemgetter

def fruitfilter(fruits):
for fruit, group in groupby(fruits, key=itemgetter(0)):
yield max(group, key=itemgetter(2))

fruits = list(fruitfilter(fruits))

或者简而言之,没有生成器:

[max(group, key=itemgetter(2)) for fruit, group in groupby(fruits, itemgetter(0))]

但也可能是您可以只使用生成器而不替换 fruits 批发。

否则使用 sorted(fruits, key=(itemgetter(0), -itemgetter(2)) 并使用 groupby 获取每组的第一个项目:

def fruitfilter(fruits):
sortedfruits = sorted(fruits, key=(itemgetter(0), -itemgetter(2)))
for fruit, group in groupby(sortedfruits, key=itemgetter(0)):
yield next(group)

fruits = list(fruitfilter(fruits))

关于相对于彼此的 Python 过滤器列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13928641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com