2012-03-23 1 views
1

길이가 동일한 두 개의 목록이 있다면 같은 길이의 두 목록을 반복하고 각 요소 쌍의 최대 값을 새 목록에 추가하는 더 간단하거나 선호되는 방법이 있습니까? 이것들은 제가 아는 두 가지 방법입니다.두 개의 길이가 같은 목록을 반복하고 각 쌍의 최대 값을 새 목록에 추가하는 간단하거나 선호되는 방법은 무엇입니까?

import itertools 

a = [1,2,3,4,5] 
b = [1,1,6,3,8] 
m1 = list() 
m2 = list() 

for x, y in zip(a, b): 
    m1.append(max(x, y)) 

for x in itertools.imap(max, a, b): 
    m2.append(x) 

이 두 가지 모두 [1, 2, 6, 4, 8]인데, 이는 정확합니다. 더 좋은 방법이 있습니까?

답변

7
map(max, a, b) 
[max(x, y) for x, y in zip(a, b)] 
+0

첫 번째 코드 줄은 지금까지 가장 단순합니다. 코드 골프에도 딱! –

3

당신은 그것을 좋아 할 수있는 :

a = [1,2,3,4,5] 
b = [1,1,6,3,8] 
m3 = [max(x,y) for (x,y) in zip(a,b)] 

또는 Python3에서 심지어

m4 = map(max, zip(a,b)) 
+0

리스트 통합을 사용하는 것을 제외하고는 첫 번째 해결책과 동일합니다. (나는 유사성 때문에 그것을 비판하지 않는다.). 목록 이해력을 선호합니까? –

+0

기본적으로 동일합니다. 예. 단지 선호도의 문제 일뿐입니다. 나는 그것이 "짧은"것이기 때문에 그것을 좋아한다. 그러나 그것은 단지 나다. – FatalError

+0

목록 내장은 코드에서 더 잘 읽혀 지므로 더 나은 솔루션입니다. 어떤 일이 일어나고 있으며, 변경하기가 더 분명합니다. –

-1

를 당신이 지능형리스트 또는

를 사용해야하므로, map() 더 이상 목록을 반환하지 않습니다
list(map(max, a, b)) 

이라면 목록이 필요하고 반복자 만 필요하지는 않습니다.

+3

이것은 아마도 Ignacio의 대답에 대한 코멘트 일 것입니다. –

관련 문제