Я пытаюсь понять, как работает расширение в Python, и это не совсем то, что я ожидаю. Например:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6].extend(a)
>>> b
>>>
Но я бы ожидал:
[4, 5, 6, 1, 2, 3]
Почему это возвращает None вместо расширения списка?
Я пытаюсь понять, как работает расширение в Python, и это не совсем то, что я ожидаю. Например:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6].extend(a)
>>> b
>>>
Но я бы ожидал:
[4, 5, 6, 1, 2, 3]
Почему это возвращает None вместо расширения списка?
Метод extend()
присоединяется к существующему массиву и возвращает None
. В вашем случае вы создаете массив - [4, 5, 6]
- на лету, расширяя его и затем отбрасывая. Переменная b
заканчивается возвращаемым значением None
.
list
методы работают по большей части и возвращают None
.
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> b.extend(a)
>>> b
[4, 5, 6, 1, 2, 3]
extend
расширяет свой операнд, но не возвращает значение. Если вы сделали:
b = [4, 5, 6]
b.extend(a)
Затем вы получите ожидаемый результат.
Другие указали на многие методы list
, особенно те, которые мутируют список, возвращают None
, а не ссылку на список. Причина, по которой они делают это, заключается в том, что вы не путаетесь о том, сделана ли копия списка. Если вы могли бы написать a = b.extend([4, 5, 6])
, то есть a
ссылка на тот же список, что и b
? Был ли b
изменен инструкцией? Возвращая None
вместо мутировавшего списка, такое утверждение становится бесполезным, вы быстро выясняете, что a
не имеет в себе того, что вы считали, и вы учитесь просто писать b.extend(...)
. Таким образом, отсутствует ясность.
У меня была эта проблема, и в то время как другие ответы дают правильные объяснения, решение/обходное решение мне понравилось не здесь. Использование оператора сложения будет объединять списки вместе и возвращать результат. В моем случае я был бухгалтером color
как 3-значный список и opacity
как плавающий, но библиотеке нужен цвет в виде 4-значного списка с непрозрачностью, как 4-я цифра. Я не хотел называть переменную throwaway, поэтому этот синтаксис соответствовал моим потребностям:
color = [1, 1, 0]
opacity = 0.75
plot.setColor(color + [opacity])
Это создает новый список непрозрачности "на лету" и новый список после конкатенации, но это хорошо для моих целей. Мне просто нужен компактный синтаксис для расширения списка с помощью float и возврата результирующего списка, не затрагивая исходный список или float.