2014-04-10 3 views
2

에있는 파일의 최대 및 최소 번호를 찾는 방법 : ... Z238.517, 등을 위해나는 목록이 파이썬

a = 
[('N', '7289'), ('N', '7290'), ('N', '7291'), ('N', '7292'), ('N', '7293'), ('N', '7294'), ('N', '7295'), ('N', '7296'), ('N', '7297'), ('N', '7298'), ('N', '7299'), 
('N', '7300'),('N', '7304'), ('N', '7305'), ('Z', '238.517'), ('N', '7306'), 
('Z', '243.363'), ('N', '7307'), ('G', '0'), ('G','1'),('G','2')] 

여기 N에 대한 최소, 7289입니다

그래서, 난 내 출력이 내가 별도로 모든 N, ZG이 목록에서 최소 및 최대를 원하는 의미합니다. 나는 그것을 어떻게하는지 모른다. 정수의 경우에만 코드는 다음과 같습니다

#> a = [(1,3),(2,5),(2,4),(7,5)] 
#> zip(*a) 
[(1, 2, 2, 7), (3, 5, 4, 5)] 

#> map(max, zip(*a)) 
[7, 5] 

#> map(min,zip(*a)) 
[1, 3] 
+0

당신은 문자열이나 숫자를 비교 하시겠습니까? '2'는 '10'보다 크거나 작습니까? N에 대한 perticular character..like에 대한 –

+0

비교 번호 ('float' 여기에서 작동)는 7307이며, G 것은 2 등등 ... – Ruchir

+0

그런 다음 숫자 형식으로 숫자의 당신의 문자열 표현을 캐스팅해야합니다 ND입니다. –

답변

3

내 솔루션은 조금 더 간단 할 것이다 :

from collections import defaultdict 

a = [('N', '7289'), 
    #... 
    ('G', '2')] 

groups = defaultdict(list) 
for tupl in a: 
    key, value = tupl[0], float(tupl[1]) 
    groups[key].append(value) 

for key, values in groups.iteritems(): 
    print key, max(values), min(values) 

출력은 다음과 같아야합니다

Z 243.363 238.517 
G 2.0 0.0 
N 7307.0 7289.0 
+0

간단 ... !!! 그것의 진짜로 아주 간단한 ..thanxx 남자 .. 감사합니다. .. :) : D – Ruchir

3
from itertools import groupby 
from operator import itemgetter 

a = [('N', '7289'), ('N', '7290'), ('N', '7291'), ('N', '7292'), 
    ('N', '7293'), ('N', '7294'), ('N', '7295'), ('N', '7296'), 
    ('N', '7297'), ('N', '7298'), ('N', '7299'), ('N', '7300'), 
    ('N', '7304'), ('N', '7305'), ('Z', '238.517'), ('N', '7306'), 
    ('Z', '243.363'), ('N', '7307'), ('G', '0'), ('G','1'),('G','2')] 

a.sort() 
for k, g in groupby(a, key=itemgetter(0)): 
    print(max(g, key=lambda x: float(x[1]))) 

출력 :

('G', '2') 
('N', '7307') 
('Z', '243.363') 
+0

'sorted '에 대한'key' 인자를 생략 할 수 있습니다. 또한 줄 계속 표시는 불필요합니다. –

+0

@StevenRumbalski는'.sort' 호출로'sorted'를 대체했습니다. 네가 옳아. – vaultah

+0

thanxx ... 출력을 얻었습니다 ... 또한 itertools에 대한 아이디어가 있습니다 ... !! – Ruchir

2
from itertools import groupby 
from operator import itemgetter 

a = [('N', '7289'), ('N', '7290'), ('N', '7291'), ('N', '7292'), ('N', '7293'), ('N', '7294'), ('N', '7295'), ('N', '7296'), ('N', '7297'), ('N', '7298'), ('N', '7299'), ('N', '7300'),('N', '7304'), ('N', '7305'), ('Z', '238.517'), ('N', '7306'), ('Z', '243.363'), ('N', '7307'), ('G', '0'), ('G','1'),('G','2')] 

a.sort(key=itemgetter(0,1)) 
for key, group in groupby(a, itemgetter(0)): 
    print key, max([x[1] for x in group]) 

출력 :

G 2 
N 7307 
Z 243.363