Python str () не вызывается из списка - PullRequest
0 голосов
/ 03 октября 2018

Когда я использую понимание списка, я получаю разные результаты при печати вложенного списка объектов, по сравнению с тем, что происходит, если я просто использую цикл for.

class Feature:
    def __str__(self) -> str:
        return 'f'

featList = [[Feature() for j in range(3)] for i in range(10)]

[print(str(f)) for f in [r for r in featList]]

for r in featList:
    [print(str(f)) for f in r]

Первая печать дает мненазад такие вещи, как:

[<<strong> main . Подлинный объект в 0x0000026AB6371588>, <<strong> main . Подлинный объект в 0x0000026AB63BA8D0>, <<strong> main . Подлинный объект в 0x0000026AB4966BE0>]

Второй отпечаток возвращает мне «f» 30 раз.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Проблема в том, как вы перебираете

featList = [[Feature() for j in range(3)] for i in range(10)]

список списков функций

a = [f for f in [r for r in featList]]

a - это список списков функций (все еще), вы можете сделать этотаким образом

a = [ f for r in featList for f in r]

a Это список f, так что теперь вы можете делать то, что хотели.

[ print(str(f)) for r in featList for f in r]

Если вы видите последнюю часть раздела «Понимание списка» на Документы Python

вы увидите пример для такого случая (понимание двойного списка)

воспринимайте его как обычный for

# Regular for
for a in A
   for b in A
       f(b)

# Comprehended Loop
a = ( f(b) for a in A for b in a)

Это почти тот же порядок, за исключением утверждения.

0 голосов
/ 03 октября 2018

Это работа для понимания списка, но вы должны переписать ваше понимание списка

[print(f) for r in featList for f in r]

Если вы хотите запустить

[print(str(f)) for f in [r for r in featList]]

, чем вы могли бы реализовать __repr__ в Feature:

def __repr__(self) -> str:
    return 'f'

Надеюсь, это поможет вам:)

...