Когда я пытаюсь скопировать часть списка, а затем добавить ее в строку, это не работает. Например:

a = [1, 2, 3, 4]
b = a[1:].append("x")

Не работает но

b = a[1:]
b.append("x")

Работает. Я не мог понять почему

0
khatara 11 Фев 2021 в 20:00

1 ответ

Лучший ответ

list.append() - это операция на месте, означающая, что она изменяет состояние list вместо того, чтобы возвращать новый объект list.

Все функции в Python возвращают None, если они явно не возвращают что-то еще. Метод a.append() сам модифицирует a, что означает, что возвращать нечего.

Другой способ увидеть это поведение - это разница между sorted(some_list) и some_list.sort().

Если вы не хотите добавлять "x" к a, тогда вам нужно будет использовать второй фрагмент, или вы можете просто объединить:

>>> a = [1, 2, 3, 4]
>>> b = a[1:] + ["x"]
>>> b
[2, 3, 4, 'x']

Чтобы уточнить:

>>> a = [1, 2, 3, 4]
>>> b = a[1:].append("x")
>>> a
[1, 2, 3, 4]
>>> a[1:]
[2, 3, 4]
>>> type(b)
<class 'NoneType'>

Обратите внимание, что b равно None, поскольку метод list.append() возвращает None. Также обратите внимание, что a фактически не изменялся. Это потому, что вы добавляли фрагмент a, но на самом деле нигде не сохраняли этот фрагмент. Обратите внимание, что произойдет, если вы сделаете a.append("x"):

>>> b = a.append("x")
>>> a
[1, 2, 3, 4, 'x']
>>> type(b)
<class 'NoneType'>

b по-прежнему None, но теперь a был изменен.

0
blorgon 11 Фев 2021 в 17:17