2009-03-09 5 views
4

파이썬에서 컬렉션에 대한 연산을 실행하고 결과를 수집하는 방법은 무엇입니까? 그래서 같은 결과파이썬에서 컬렉션에 대한 연산을 실행하고 결과를 수집하는 방법은 무엇입니까?

Operation (originalElement, anotherVar) # returns new number. 

및 수집 :

결과를 = 또 다른 목록 그래서 100 개 번호 목록을 가지고 있고, 나는 그들 각각이 같은 기능을 실행하려면

...

어떻게하면됩니까? 어쩌면 람다를 사용하고 있을까요? 파이썬에서

답변

12

List comprehensions. 그들은 같은 모양 :

F (X)의 일부 기능과 줄이 순서입니다
a = [f(x) for x in bar] 

.

당신과 같은 구조와 부분적으로 도포 함수 F (X)를 정의 할 수

def foo(x): 
    return lambda f: f*x 

x로 파라미터를 승산하는 기능을 리턴한다. 지능형리스트에 사용되는 구조의이 유형의 사소한 예를 보이는 같은 :

>>> def foo (x): 
...  return lambda f: f*x 
... 
>>> a=[1,2,3] 
>>> fn_foo = foo(5) 
>>> [fn_foo (y) for y in a] 
[5, 10, 15] 

내가 어떤하지만 상당히 난해한 경우 구조의이 종류를 사용하여 생각하지 않지만. 파이썬은 진정한 기능 언어가 아니기 때문에 고차원 함수를 사용하는 영리한 기법을 하스켈 (Haskell)보다 덜 할 수 있습니다. 이 유형의 구조에 대한 응용 프로그램을 찾을 수는 있지만 pythonic이 아닙니다. 당신은 같은과 간단한 변환을 달성 할 수 :

>>> y=5 
>>> a=[1,2,3] 
>>> [x*y for x in a] 
[5, 10, 15] 
+1

foo (x, anotherVar)? –

+0

감사합니다. 이것은 꽤 좋은 구문입니다. –

+0

Mykola : 원하는대로 y = 4라고 말하고 싶습니다. a = [f (x, y) for x in bar] 또는 a = [f (x, y) for x, y in zip (bar, baz)]. 또한 izip을 참조하십시오. –

1

이렇게 다른 (다소 상각) 방법은 :

DEF 케빈 (V) 복귀 브이 *의 V

발스 = 범위 (0100)

맵 (케빈 발스)

+0

IIRC와 같이 "인라인"으로 처리 할 수 ​​있습니다. 이는 기존 기능으로 유지되지만 list comprehensions에 대한 랩퍼로 구현됩니다. – ConcernedOfTunbridgeWells

관련 문제