2012-04-16 3 views
0

나는 다양한 수의 목록을 가지고 있으며 모든 목록에서이 수의 각각을 최대로 찾고 싶습니다.최대 가변 수 목록에 매핑

지도 함수를 사용하여 모든 목록의 최대 값을 매핑하려고하며 생성자 표현식을 사용하여지도 함수에서 매개 변수를 전달해야합니다.

나는 이런 식으로 뭔가를 사용하고 있지만 작동하지 않습니다

map(max,x[c] for c in x.keys()) 

을 내 목록을 사전에 예를 들어 : 당신은 아마 눈치

{1: [0, 1, 0, 0, 3, 0], 
2: [1, 0, 0, 0, 0, 4, 5], 
3: [0, 5, 6, 0, 1, 1]} 

목록이 모두 아님 크기가 같아서 파싱해야하는 데이터가있는 방식으로 인해 원하는 방식입니다.

이의 결과는해야한다 :이 일을하는 다른 방법이있는 경우

[1, 5, 6, 0, 3, 4, 5] 제안 마십시오.

위의 목록 예입니다. 내 실제 사전 설정 방법 때문에 목록을 검색하는 데 x.values ​​()를 사용할 수 없습니다. 목록은 계층 구조의 맨 아래에 포함되어 있으며 계층 구조의 맨 위에 반복하여 비교할 목록을 검색해야합니다. 내가 가장 짧은 값의 끝을지나 max의를 얻으려면 x.values ​​()의 사용

+0

나는 이미 당신을 위해 일한 대답을 얻었다 알고 당신이 원하는 그러나 목록을 얻을 수 있습니다. ''map (x.keys()에서 c의 max (x [c])'는 작동하지 않습니다. 왜냐하면 생성자 표현식은 괄호 안에 있어야하기 때문입니다. 만약 내가'map (max, (x in c for x))'하면 그것을 작동합니다. –

답변

4

없이 그렇게 솔루션을 제공하시기 바랍니다 모든 목록을 검색하는 발전기 식을 사용해야합니다, 당신은 izip_longest 필요

from itertools import izip_longest 

d={1: [0, 1, 0, 0, 3, 0], 
2: [1, 0, 0, 0, 0, 4, 5], 
3: [0, 5, 6, 0, 1, 1]} 

# there are other variations like 
# [max(column) for column in izip_longest(*d.itervalues())] 
print map(max, izip_longest(*d.values())) 
# [1, 5, 6, 0, 3, 4, 5] 

이 여전히 당신은 모든 목록에 액세스 할 수있는 간단한 방법이없는 경우에도 그것을 할 수있는 방법입니다 파이썬 3


zip_longest로 알려져있다.

d = {1: {'a': [0, 1, 0, 0, 3, 0]}, 
    2: {'a': [1, 0, 0, 0, 0, 4, 5]}, 
    3: {'a': [0, 5, 6, 0, 1, 1]}} 

def value_gen(obj): 
    for key in obj: 
     yield obj[key]['a'] 

그런 다음 사용 :

map(max, izip_longest(*value_gen(d))) 
+0

+1, 당신은 정확합니다. –

+0

혼란에 대해 사과드립니다. 목록 설정 방법 목록은 계층 구조의 맨 아래에 포함되어 있고 계층 구조의 맨 위에 반복해야하므로 모든 목록을 검색하기 위해 x.values ​​()를 수행 할 수 없습니다. 방법은 목록을 검색 ... x.values ​​() 나를 위해 작동하지 않습니다 – emad

+0

이 나를 위해 작동합니다 : map (최대, izip_longest (x.keys()) c)에 대한 izip_longest (* x [c])) – emad