我有一个由三位数组成的整数列表
list1 = [505, 504, 503, 502, 207, 206]
如果我们将子集定义为按其第一个数字分类的所有值,我想比较列表中的元素并保留每个子集中的最大值。
例如,在这里,子集将是[505, 504, 503, 502]
和[207, 206]
。
每个子集的最大值list
将为
max_values = [505, 207]
如何直接从list1
转到max_values
?
答案 0 :(得分:1)
假设组中有一个共同的第一个数字:
list1 = [505,504,503,502,207,206]
from itertools import groupby
for k,v in groupby(list1,key=lambda x: str(x)[0]): # use x // 100 if you only have three digit numbers
print(max(v))
505
207
groupby
使用键str(x)[0]
对所有元素进行分组,这是列表中所有数字的第一个数字,然后我们在每个分组v
上调用max。
答案 1 :(得分:1)
如果我正确地得到了您的问题,那么来自同一组的元素可能会分散在输入中:
>>> def get_group(number):
return number // 100
>>> result = {}
>>> for element in list1:
group = get_group(element)
last_max = result.get(group)
result[group] = element if last_max is None else max(element, last_max)
>>> result.values()
[207, 505]