2015-01-03 44 views
0

最大整数我有三个数字组成一列整数每个Python的保留,从名单

list1 = [505, 504, 503, 502, 207, 206] 

如果我们定义一个子集,通过他们的第一个数字分类的所有值,我想比较列表元素,并保留每个子集中的最大值。

因此,举例来说,在这里,子集是[505, 504, 503, 502][207, 206]。然后

所得到的来自每个子集最大值的list

max_values = [505, 207] 

我怎么能直接从list1max_values

+3

必须有开始用5或2或rule.Like数字etc.This不是明确的问题。它可以是该清单中的所有内容,您的规则是什么?数字的范围是什么? –

+1

在列表中设置了什么? – sashas

+0

@sasha http://stackoverflow.com/questions/27713046/number-of-triangles-containing-the-point-0-0/27713202#27713202这是我见过的最好的答案。 +1! –

回答

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

+0

太棒了!这工作。这个论坛真的很棒:-)。非常感谢Padraic。如果你可以花一些时间解释你的代码,这将是很好的。我是python新手,所以我会更好地理解。感谢你的宝贵时间。 – Danira

+0

@PadraicCunningham我在想的东西,但你的速度和简单性:) – Jivan

+0

打我都还可以用'键=拉姆达X工作:X // 100',取决于OP – Jivan

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]