Python: расширение списка объектов класса - PullRequest
1 голос
/ 15 декабря 2010

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 15 декабря 2010

{arg_name.attribute_name} также работает:

for row in table:
    print(' - '.join('{0.name}'.format(elt) for elt in row))
1 голос
/ 15 декабря 2010

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

for row in table:
    print '{0} - {1} - {2}'.format(*[x.name for x in row])
1 голос
/ 15 декабря 2010

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

Это глупо. Чтобы выполнить итерацию по каждому элементу многомерного массива, вам нужно , чтобы использовать вложенные циклы. Они могут быть неявными (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))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...