Python 3.7.1 не может добавить встроенный после разделения - PullRequest
0 голосов
/ 06 ноября 2018

В настоящее время я пытаюсь участвовать в нескольких однострочных конкурсах, и я заметил странное поведение, которое усложняет задачу.

это
"a,b,c".split(",").append("d")
Возвращает None, в то время как это:
l = "a,b,c".split(",")<br> l.append("d")
правильно возвращает ["a", "b", "c", "d"]
Это известная проблема или нормальное поведение? Документация говорит, что split возвращает список строк.
Я использую python 3.7.1, версию от 22 октября в официальных репозиториях Arch.

1 Ответ

0 голосов
/ 06 ноября 2018

l.append("d") возвращает None, как и другой вызов. Он изменяет список l, который вызывается, хотя (что он также делает в другом вызове, но там у вас нет ссылки на объект списка):

>>> l = "a,b,c".split(",")
>>> l.append("d") is None  # the append call still returns None
True
>>> l  # it does, however, mutate the list
['a', 'b', 'c', 'd']

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

l = "a,b,c".split(",") + ["d"]

Если (по какой-то причине) вы хотите использовать list.append и , чтобы получить результирующий список в одну строку, вам придется прибегнуть к некоторым злодеяниям, таким как приставание к генератору или понимание побочные эффекты (не делайте этого в серьезном коде!):

l = next(x for x in ("a,b,c".split(","),) if not x.append("d"))
...