我有一个由三个数字组成的整数列表
list1 = [505, 504, 503, 502, 207, 206]
如果我们将子集定义为按第一个数字分类的所有值,我希望比较列表中的元素,并保留每个子集中的最大元素。
例如,这里的子集是[505, 504, 503, 502]
和[207, 206]
。
然后,每个子集的最大值的list
将为
max_values = [505, 207]
我怎样才能直接从list1
到max_values
?
发布于 2015-01-03 16:09:14
假设组中有一个共同的第一个数字:
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。
发布于 2015-01-03 16:12:05
如果我正确地回答了您的问题,并且来自同一组的元素可能分散在输入中:
>>> 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]
https://stackoverflow.com/questions/27760888
复制相似问题