Не могу получить l oop для работы со списком - PullRequest
0 голосов
/ 01 февраля 2020

Это для l oop работает нормально, но не как понимание списка. Понимание создает пустые элементы для каждой итерации. Может кто-нибудь объяснить, что не так и как это исправить?

def GetAsciiList():
    num_list = []
    for num in range(32, 42, 1):
        num_list.append((str(num), chr(num)+" "))
    return num_list

def GetAsciiListLC():
    num_list = []
    num_list = [(num_list.append((str(num), chr(num)+" "))) for num in range(32, 42, 1)]
    return num_list

print GetAsciiList()
print GetAsciiListLC()

консольный вывод:

[('32', '  '), ('33', '! '), ('34', '" '), ('35', '# '), ('36', '$ '), ('37', '% '), ('38', '& '), ('39', "' "), ('40', '( '), ('41', ') ')]
[None, None, None, None, None, None, None, None, None, None]

1 Ответ

2 голосов
/ 01 февраля 2020

Рассмотрим эту строку в GetAsciiListLC():

num_list = [(num_list.append((str(num), chr(num)+" "))) for num in range(32, 42, 1)]

num_list.append((str(num), chr(num)+" "))), мутирует список и возвращает None.

Я думаю, что вы хотите this:

def GetAsciiListLC():
    """ Return list of 2-tuples containing numbers and ASCII equivalents, both as strings. """
    return [(str(num), chr(num) + " ") for num in range(32, 42)]

См. этот вопрос для обоснования возврата None из метода list.append (): Почему append () всегда возвращает None в Python?

...