2012-05-25 4 views
0

나는 루프를 위해 몇 가지 다른 방법을 시도했다. 목록의 목록을 고려하십시오... 질문 (Python)

list_of_lists = [] 
list = [1, 2, 3, 4, 5] 
for i in range(len(list)): 
    list_of_lists.append(list) # each entry in l_o_l will now be list 

을 이제 내가 별도의 목록, a에 포함 l_o_l의 첫 번째 "열"을 갖고 싶어 가정 해 봅시다. 몇 가지 방법이 있습니다. 예를 들어 :

a = [list[0] for list in list_of_lists] # this works (a = [1, 1, 1, 1, 1]) 

또는 두 번째 예를 들어

a=[] 
for list in list_of_lists: 
    a.append(hit[0]) #this also works 

그러나, I는

a=[] 
a.append(list[0] for list in list_of_lists) #but this, obviously, produces a generator error 

실무 "번역"에 해당 될 수있는 "전체"확장을 상상 실제로,

a=[] 
a.append([list[0] for list in list_of_lists]) #this works 

제 질문은 해석과 문장 부호에 관한 것입니다. 어떻게 파이썬은 "list_of_lists"목록의 "list [0]"확장을 추가/추가 할 것인가? (다시 작성해야합니까?)

+1

어디에도 'hit'을 정의하지 마십시오. – agf

+8

'list'를 절대 호출하지 마십시오. 'list'라고 불리는 내장 함수를 숨기고 문제를 일으킬 것입니다. – murgatroid99

+0

"전체 확장"이란 무엇입니까? 세 번째 예는 처음 두 예와 동일하지 않습니다. 'a.extend (list_of_lists에서 l에 대해 l [0])'('list'와'hit'가 같은 변수로 의도되었다고 가정) –

답변

3

여기서 문제는 목록 보급 및 생성자 표현이 단순한 루프가 아니라 그 이상의 것입니다.

List comprehensions은 표시된 것처럼 반복 가능한 목록에서 손쉽게 목록을 작성할 수 있도록 설계되었습니다.

후자의 두 예는 모두 작동하지 않습니다. 두 경우 모두 목록에 잘못된 것을 추가합니다. 첫 번째 경우에는 생성기이고 두 번째 경우는 기존 목록에 목록을 추가합니다. 이들 중 어느 것도 당신이 원하는 것입니다.

동시에 두 가지 방법으로 무언가를하려하고 있습니다. 작동하지 않습니다. 목록 이해력을 사용하십시오. 가장 능률적이고 읽기 쉬운 방법으로 원하는 것을 수행합니다.

당신의 주된 문제는리스트 보급 및 생성자 표현을 취한 것으로 보이며 그들이 무엇인지, 무엇을하려고하는지 이해하지 못하는 것입니다. 나는 당신이 그들을 사용하기 전에 더 멀리 그들을 이해하려고 노력하는 것이 좋습니다.

1

제 질문은 해석과 문장 부호에 관한 것입니다. 어떻게 오는지 파이썬은 "list_of_lists"목록에서 히트 [0]을 확장하기 위해 (따라서 다시 작성하려면 에서 필요) 주위에 괄호를 추가하거나 추가하지 않습니다.

무슨 뜻인지 확실치 않습니다. 나는 당신이 목록 comprehensions 외에도 추가 생성기 (i*2 for i in range(0,3))[i*2 for i in range(0,3)]을 알지 못할 수도 있다고 생각합니다.

생성기 식은 목록 이해력 (그러나 생성기)과 마찬가지로 매핑을 수행하는 생성기를 만들기위한 구문입니다. 모든리스트 통합 [c]c)list(를 다시 작성할 수 있습니다.알몸이있는 이유는 list() 안에 c 안에있는 이유는 생성자 표현식이 호출의 매개 변수로 표시되는 경우 대괄호를 삭제할 수 있기 때문입니다. 이것이 바로 a.append(hit[0] for list in list_of_lists)입니다.