2010-02-05 7 views
0

같은 길이의 시퀀스에 단항 함수 시퀀스를 적용해야하는 경우가 자주 있습니다. 내 첫 번째 생각은 map()과 함께하는 것입니다. 그러나 이는 시퀀스의 모든 항목에 적용 할 단일 기능 만 사용합니다.반복 가능 항목에서 단항 함수 시퀀스로 변환

다음 코드에서 예를 들어, str.upper()을 첫 번째 항목에 적용하고 int을 각 a의 두 번째 항목에 적용하려고합니다. "transform"은 제가 적용한 효과를위한 자리 표시 자입니다.

COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()]) 

표준 라이브러리가 있습니까? 아니면 이와 같은 변환을 수행 할 수있는 유용한 구현이 있습니까?

+1

가이 질문에 아무 문제가 없다, 그러나 나는 과시과의 추가 라인을 살 것 이것을위한 코드. 레코드 1과 레코드 2의 필드를 나누어 2 행을 정리합니다. 다른 말로하면, 내가 선택한 필드가 아닌 것입니다. –

답변

3

무엇에 대해 ... : 나는 현재이 사용하고

def transform(functions, arguments): 
    return [f(a) for f, a in zip(functions, arguments)] 
+0

실제로 그것은 –

1
>>> s="pid,5 user,8 program,28 dev,10 sent,9 received,15".split() 
>>> [ (m.upper(),int(n)) for m, n in [i.split(",") for i in s ] ] 
[('PID', 5), ('USER', 8), ('PROGRAM', 28), ('DEV', 10), ('SENT', 9), ('RECEIVED', 15)] 
1

:

def transform(unaries, iterable): 
    return map(lambda a, b: a(b), unaries, iterable) 
+0

Alex Martelli의 대답과 어떻게 관련이 있습니까? 조금 더 간단 해 보입니까? –