Использование Python с одним вкладышем, содержащим оператор print, создает список None`s - PullRequest
0 голосов
/ 06 февраля 2019
ts_file = "ts_nfl_04_red_zone_conversion"

ts_title = [print(i + ' ', end="") for i in ts_file[7:].upper().split("_")]

Результат:

04 RED ZONE CONVERSION [None, None, None, None]

Что дает этот список утверждений None и как я могу его избежать?Большое спасибо.

Ответы [ 6 ]

0 голосов
/ 06 февраля 2019

Как уже упоминалось, print () ничего не возвращает.Следовательно, Ни один не напечатан.Если вам интересно, почему элементы правильно печатаются, а затем следуют 4 None, то это из-за того, как работают функции.

Функция вызывается и после выполнения каждого оператора внутри, значениевозвращается, но только если функция возвращает что-то.

В вашем случае, print(i + ...) вызвал функцию печати на i, print был выполнен, то есть он напечатал i на консоль, а затем было возвращено его значение, которое равно None, так как print () делает nничего не вернуть.

Принимая решение, вы можете использовать метод .join () или метод replace ():

a = ts_file[7:].upper().replace("_", " ")
print(a)

или

a = (' ').join(ts_file[7:].upper().split("_"))
print(a)

Вывод:

04 RED ZONE CONVERSION

Вы могли бы также сделать другое, если бы вам не было дела до того, что было сохранено в ts_title: как только вы назначите ts_title со своим пониманием списка:

ts_title = [print(i + ' ', end="") for i in ts_file[7:].upper().split("_")]

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

0 голосов
/ 06 февраля 2019

Вы создали список None, потому что создали его.Вот для чего нужно понимание списков: создание списков.Однако выражения не выводятся автоматически, если вы не находитесь в интерактивном интерпретаторе и не вернули выражение на верхний уровень, что означает, что вы на самом деле не увидите этот вывод, если сохраните его в переменной.

В любом случае, вы должны использовать обычный цикл в этой ситуации, как показано ниже:

ts_file = "ts_nfl_04_red_zone_conversion"

for i in ts_file[7:].upper().split("_"):
    print(i + ' ', end="")

Однако вы, конечно, все еще можете использовать понимание и создать пустой список, слегка переставив его,сохранение его в переменную, чтобы оно не печаталось автоматически в интерактивном интерпретаторе:

ts_file = "ts_nfl_04_red_zone_conversion"

ts_title = [None for i in ts_file[7:].upper().split("_") if print(i + ' ', end="")]
0 голосов
/ 06 февраля 2019

Как упоминалось в комментариях, print возвращает None и не предназначен для использования в понимании списка.

, если вы хотите, чтобы однострочник достиг желаемого результата, вы можете сделатьчто-то вроде

print(' '.join(ts_file[7:].upper().split("_")))
0 голосов
/ 06 февраля 2019

Сравнение списков здесь на самом деле не нужно, поскольку оператор print возвращает тип None.Вы можете просто перебрать строку следующим образом:

for i in ts_file[7:].upper().split("_"): print(i + " ", end="")
0 голосов
/ 06 февраля 2019

Вы можете использовать replace вместо:

>>> ts_file[7:].upper().replace("_", " ")
0 голосов
/ 06 февраля 2019

Вместо этого вы можете join элементы, полученные в результате разбиения строки:

ts_title = (' ').join(ts_file[7:].upper().split("_"))
# '04 RED ZONE CONVERSION'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...