2012-07-13 2 views
13

누군가이 Python 코드 스 니펫의 마지막 줄을 나에게 설명 할 수 있습니까?목록 내의 for 루프는 Python에서 무엇을합니까?

Cell은 또 다른 클래스입니다. 나는 for 루프가 개체를 Column 개체에 저장하는 데 어떻게 사용되는지 이해할 수 없습니다.

class Column(object): 

    def __init__(self, region, srcPos, pos): 

     self.region = region 
     self.cells = [Cell(self, i) for i in xrange(region.cellsPerCol)] #Please explain this line. 
+2

그것은 '지능형리스트'라고이 값을 float로 문자열 목록을 변환 float()를 사용 –

답변

29

당신이 요구하는 코드 라인은 list comprehension을 사용하여 목록을 만들고이 목록에 수집 된 데이터를 self.cells에 할당합니다. 그것은

self.cells = [] 
for i in xrange(region.cellsPerCol): 
    self.cells.append(Cell(self, i)) 

설명하는 것과 같습니다

가장이 어떻게 작동하는지을 설명하기 위해 몇 가지 간단한 예는 당신이 가지고있는 코드을 이해 돕는 교육적 수 있습니다. 파이썬 코드로 작업을 계속한다면, 당신은리스트의 이해력을 다시 만나게 될 것이고, 당신은 그것을 직접 사용하고 싶을 것입니다.

주, 아래의 예에서는 두 코드 세그먼트들은 그들 값 listmyList리스트에 저장된 생성한다는 점에서 상당 이다. 예를 들어

는 :

myList = [] 
for i in range(10): 
    myList.append(i) 

당신이 값 목록 당신로 이동하는 경우는 결정 어떤 조건이 있다면 예를 들어, 그래서 너무 복잡 할 수

myList = [i for i in range(10)] 

목록 함축과 동일 목록 이해력으로 이것을 표현할 수도 있습니다.

는 는

이 예제은 목록에서 짝수 값을 수집합니다 :

myList = [] 
for i in range(10): 
    if i%2 == 0:  # could be written as "if not i%2" more tersely 
     myList.append(i) 

과 동등한 지능형리스트 :

myList = [i for i in range(10) if i%2 == 0] 

두 최종 노트 :

  • 당신은 "중첩 된 수 "목록 이해력, 그러나 그들은 빨리 이해하기 어려워진다 :
  • 목록 이해는 동등한 for-loop보다 빠르게 실행되므로 종종 효율성을 염려하는 일반 Python 프로그래머에게 인기가 있습니다.

마지막으로, 목록에서 반복되는 항목에 함수를 적용 할 수 있음을 보여주는 마지막 예제입니다.

data = ['3', '7.4', '8.2'] 
new_data = [float(n) for n in data] 

이 제공 :

new_data 
[3.0, 7.4, 8.2] 
1

그것은 당신이 이런 짓을하는 경우와 동일합니다 :

def __init__(self, region, srcPos, pos): 
    self.region = region 
    self.cells = [] 
    for i in xrange(region.cellsPerCol): 
     self.cells.append(Cell(self, i)) 

이것은 list comprehension라고합니다.

관련 문제