2010-12-15 6 views
1

이것은 빠른 것입니다. table이라는 클래스 객체의 다차원 목록이 있다고 가정하고 클래스 속성 .name에 액세스해야합니다.Python : 클래스 객체 목록 확장

중첩 루프를 사용하고 싶지 않고 인쇄하려면 format()을 사용해야합니다.

for i in range(3): 
    print '{0} - {1} - {2}'.format(*table[i].name) 

분명히 작동하지 않았습니다. 뿐만 아니라 (*table[i]).name. table[i] 목록의 각 클래스 개체에 대해 .name에 액세스 할 수 있어야합니다. 나를 올바른 방향으로 인도한다면 미리 감사드립니다.

+1

왜 For 루프를 사용하지 않으려는? 어쨌든 모든 요소를 ​​반복해야합니다. 자기가하는 일을 저축하지 않아. – Falmarri

답변

1

:

for row in table: 
    print '{0} - {1} - {2}'.format(*[x.name for x in row]) 
+0

완벽. 감사. – Ruel

1

나는 중첩 루프

이 바보를 사용하지 않습니다. 다차원 배열의 각 요소를 반복하려면 중첩 루프를 사용하려면 이 필요합니다. 그들은 암시 적이거나 (map 또는 목록 이해력)있을 수 있지만, 그것이 거기 있지 않다는 것을 의미하지는 않습니다! 다음은 map 또는 열악한 format 포장을 벗기는 것보다 훨씬 깨끗하고 청결합니다.

import operator 
for row in table: 
    print '{0} - {1} - {2}'.format(*map(operator.attrgetter('name'), row)) 

당신이했습니다는 사실을 언급하지 않기 위하여, 그 위에 비해 지저분하고 명확하지 않다 말해 당신이 정말로 당신의 방법을 사용하는 방법을 알고 싶다면

for row in table: 
    for elt in row: 
     print <...> 

마법 상수에서 하드 코딩 3 - 4x4 테이블로 변경하려면 어떻게해야합니까? 예를 들어이 같이