2014-11-13 5 views
0

iteratin일반적으로 list[-1]을 통해 추가 된 마지막 요소에 액세스하는 동안 어떻게 목록 이해에서 생성 된 요소에 액세스 할 수 있습니다. 그것을 반복하면서이해 목록/생성자 항목 반복 색인

하는 발전기 또는 이해 목록의 경우, 어떻게 요소를 얻을 수 있습니다

[<access to last element> added for i,item in enumerate(range(10))] 

비슷한 구축 :

내가 질문에서 이것을 이해 무엇
i=0 
    l=[0] 
    while i<10: 
     newItem= 2*l[-1] 
     l+=[newItem] 
     i+=1 
+0

이 코드는 단지 제로의 목록을 제공 할 것입니다. – IanAuld

+0

확실하지 않은 질문이 – Hackaholic

+0

목록 작성과 비슷한 일부 기능을 만들려고합니까 ??? – Hackaholic

답변

1

목록 함축이 기능을 제공하지 않습니다. 단순화를 위해 실제 for 문으로 수행 할 수있는 작업의 일부만 지원하며이 기능은 해당 하위 집합에 포함되어 있지 않습니다. 당신이 정말로, 당신은

prev = [None] 
l = [(prev.__setitem__(0, do_something_with(prev[0])), prev[0])[1] for i in thing] 

처럼 추한 해킹을 사용하고 싶지만 경우 그들은 모두 훨씬 덜 읽을 수 for 루프보다 더있어.

파이썬 3에서, 당신은 mapfilter는 지능형리스트에 forif 조항에 무엇을 할 기능에 인 itertools.accumulate이 있습니다. 출력의 첫 번째 항목은 입력의 첫 번째 항목이고 그 이후의 항목은 이전 출력 항목과 다음 입력 항목을 지정한 함수에 전달하여 생성됩니다.

import itertools 
def do_something_with(prev_output, next_input): 
    return prev_output * next_input 

input_list = [1, 4, 2, 5, 3] 
l = list(itertools.accumulate(input_list, do_something_with)) 
# l == [1, 4, 8, 40, 120] 
+0

매우 편리한 대답입니다. 감사! – user3378649

0

: 나는를 확실하지 않음

l=[1] 
[ l.append(l[-1]*2) for i,x in enumerate(l,start=1) if i<10 ] 
[None, None, None, None, None, None, None, None, None] 
>>> l 
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512] 

이렇게하면 목록이 업데이트되지만천6조5백84억6천1백14만3천2백10리터를 사용하지 않고

하지만 [-1] :

l=[1] 
[ l.append(l[i]*2) for i,x in enumerate(l) if i<10 ] 
[None, None, None, None, None, None, None, None, None, None] 
>>> l 
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024] 
+1

이것은 (내가 말할 수있는 한) 그의 질문에 대답하지 않습니다. 나는 그가 이전 요소를 기반으로 목록에 요소를 추가하는 방법을 묻고 있다고 생각합니다. 예를 들어,'l = [1]'이면, 이해력은 목록의 마지막 요소 (이 경우 1)에 2를 곱한 다음리스트에 결과를 더하고 현재는 [[1, 2]'가됩니다. 마지막 요소 인 2를 2로 곱하고 결과를 덧붙입니다. – IanAuld