2010-12-15 2 views
1

это быстрый. Предположим, я получил многомерный список объектов класса, названный table, и мне нужно получить доступ к атрибуту класса .name.Python: расширенный список объектов класса

Я не хочу использовать вложенные петли, и, конечно, для печати этого, мне нужно использовать format().

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

Очевидно, что это не сработало. Также как (*table[i]).name. Мне нужно иметь доступ к .name для каждого объекта класса в списке table[i]. Не возражаете, если вы поместите меня в правильное направление? Заранее спасибо.

+1

Почему вы не хотите использовать вложенные для петель? В любом случае вам придется перебирать все элементы. Вы не спасаете себя. – Falmarri 2010-12-15 14:54:00

ответ

1

Как это, например:

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

Perfect. Благодарю. – Ruel 2010-12-15 15:00:34

1

Я не хочу, чтобы использовать вложенные циклы

Это глупо. Для итерации по каждому элементу многомерного массива вам нужно использовать для использования вложенных циклов. Они могут быть неявными (map или список), но это не значит, что их там нет! Следующее будет намного опрятным и чище, чем что-либо с map или неприятным распаковкой format.

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

Если вы действительно хотите знать, как использовать метод:

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

Скажи мне, что это не грязный и неясными по сравнению с выше, не говоря уже о том, что вы hardcoded в волшебной константе 3 - что, если вы хотите перейти на таблицу 4x4?

Смежные вопросы