Последний шаг!(настройка питона) - PullRequest
0 голосов
/ 11 ноября 2010

У меня есть этот код:

        emailRows = []
        for rowTuple in listOfRows: #row loop
            emailLine = []
            for tup in rowTuple: #field loop
                emailLine.append(str(tup).center(20))                
            emailRows.append('\t'.join([field.strip().center(20) for field in emailLine]))
        rows = '\n'.join(emailRows)
        emailBody = emailBody + rows

который я до сих пор изменил на этот код:

        emailRows = []
        for rowTuple in listOfRows: #row loop
            emailRows.append('\t'.join([field.strip().center(20) for field in [str(tup).center(20) for tup in rowTuple]]))
        rows = '\n'.join(emailRows)
        emailBody = emailBody + rows

Я не уверен, но, похоже, я могу как-то избавиться от последнего цикла for. Хотя мне нужна помощь, чтобы сделать это.

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Я не уверен, что результат стоит затраченных усилий, но если вы собираетесь пойти по пути устранения всех ваших петель for в пользу понимания, вы должны заметить, что вы можете использовать генератор выражения вместо списочных представлений, чтобы избежать создания (а затем выбрасывания) промежуточных списков.

1 голос
/ 11 ноября 2010

Вы можете использовать map() вместо for x in seq:

rows='\n'.join(map(lambda row: '\t'.join(map(lambda cell: str(cell).center(20), row)), listOfRows))

Также вы можете попробовать reduce() вместо join():

def cell_format(cell):
    return str(cell).center(20)

def row_format(res, cell):
    return res+'\t'+cell

def rows_format(res, row):
    return res+'\n'+row

rows=reduce(rows_format,
            map(lambda row: reduce(row_format, map(cell_format, row)),
                listOfRows))

Но ваш первый пример выглядит многокрасивее))

1 голос
/ 11 ноября 2010
'\n'.join(('\t'.join([field.strip().center(20) for
    field in [str(tup).center(20) for
        tup in rowTuple]])) for rowTuple in listOfRows)

Ух ты, это запутано. Я надеюсь, что cProfile говорит, что этот парень - сильный нападающий.

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