Чем отличается add от append python
Перейти к содержимому

Чем отличается add от append python

  • автор:

В чем разница между extend и append?

Я немного не понимаю в чем разница между append и extend в структурах данных, на конкретной ситуации.

a = [1] a.append(a) print(a) #[1, [. ]] 
a = [1] a.extend(a) print(a) #[1, 1] 
a = 1, a += a print(a) #(1, 1) 

Как я понимаю в первом случае я создаю список, в него засовываю его же, но так как он уже изменился, и айди осталось то же, то ему придется себя еще раз изменить рекурсивно и так далее. В третьем мы изменяем кортеж, но изменяем его айди и соответсвенно, тот кортеж уже не тот, что после. Но что во втором не так?

Отслеживать
задан 28 июн 2022 в 19:10
19 6 6 бронзовых знаков

Подтверждаю, абсолютно тождественный результат. Вопрос — откуда ТС взял результат первого примера. Вернее так: результат предъявленный ТС может получиться в случае использования конструкции a.extend([a])

28 июн 2022 в 19:21

В первом случае список содержит ссылку на себя самого в качестве одного из элементов. Еще раз для этого ничего менять не придется. Разницы между этим списком и списком, содержащим ссылку на другой список, практически нет. А вот при выводе такого списка можно уйти в бесконечную рекурсию. Чтобы этого избежать, библиотечная функция просто выводит троеточие.

28 июн 2022 в 19:45

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

a.append(x) тупо берет элемент x как есть и добавляет его в список a. x может быть что угодно, оно просто добавится в список. Если x список, то в a добавится один элемент — список x. А в extend нужно передавать итератор, который поэлементно добавится в список.

Отслеживать
ответ дан 28 июн 2022 в 19:44
Олег Плюснин Олег Плюснин
76 2 2 бронзовых знака

a.extend(a) 

Это полностью эквивалентно коду:

for x in a.copy(): a.append(x) 

И при этом совершенно не важно, что находится в a , главное чтобы по этому можно было проитерироваться, ну и чтобы a.append работало.

Update: Поставил a.copy() , extrn прав, вот не проверишь код — и окажется какая-нибудь засада.

Метод append() и extend() в Python

Метод append() в Python добавляет элемент в конец списка.

list.append(item)

Параметры

Метод принимает единственный аргумент:

  • item – элемент, который нужно добавить в конец списка.

Элементом могут быть числа, строки, словари, другой список и т.д.

Возвращаемое значение

Метод не возвращает никакого значения (возвращает None).

Пример 1: Добавление элемента в список

# animals list animals = ['cat', 'dog', 'rabbit'] # 'guinea pig' is appended to the animals list animals.append('guinea pig') # Updated animals list print('Updated animals list: ', animals)
Updated animals list: ['cat', 'dog', 'rabbit', 'guinea pig']

Пример 2: Добавление списка в список

# animals list animals = ['cat', 'dog', 'rabbit'] # list of wild animals wild_animals = ['tiger', 'fox'] # appending wild_animals list to the animals list animals.append(wild_animals) print('Updated animals list: ', animals)
Updated animals list: ['cat', 'dog', 'rabbit', ['tiger', 'fox']]

Важно отметить, что в список животных в приведенной выше программе добавляется один элемент (список wild_animals).

Если вам нужно добавить элементы списка в другой список (а не в сам список), используйте метод extend().

list1.extend(iterable)

При этом все элементы Iterable добавляются в конец list1.

Параметры

Как уже упоминалось, метод принимает итерацию, такую как список, кортеж, строка и т.д.

Возвращаемое значение

Метод изменяет исходный список, он не возвращает никакого значения.

Пример 1: Использование метода

# language list language = ['French', 'English'] # another list of language language1 = ['Spanish', 'Portuguese'] # appending language1 elements to language language.extend(language1) print('Language List:', language)
Language List: ['French', 'English', 'Spanish', 'Portuguese']

Пример 2: Добавить элементы кортежа и установить их в список

# language list language = ['French'] # language tuple language_tuple = ('Spanish', 'Portuguese') # language set language_set = # appending language_tuple elements to language language.extend(language_tuple) print('New Language List:', language) # appending language_set elements to language language.extend(language_set) print('Newer Language List:', language)
New Language List: ['French', 'Spanish', 'Portuguese'] Newer Language List: ['French', 'Spanish', 'Portuguese', 'Japanese', 'Chinese']

Другие способы расширения списка

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

a = [1, 2] b = [3, 4] a += b # a = a + b # Output: [1, 2, 3, 4] print('a =', a)
a = [1, 2, 3, 4]

2. Синтаксис нарезки списка.

a = [1, 2] b = [3, 4] a[len(a):] = b # Output: [1, 2, 3, 4] print('a =', a)

Методы списков Python

Для добавления множества элементов используйте extend() . Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.clear( i ) ¶

Удаляет из списка все имеющиеся в нём значения.

my_list = [1, 2, 3]
my_list.clear() # None
my_list # []

Действие метода эквивалентно выражению del my_list[:] .

list.copy() ¶

Возвращает копию списка. Внимание: Возвращаемая копия является поверхностной (без рекурсивного копирования вложенных элементов).

my_list = [1, 2, 3]
my_list_copy = my_list.copy() # [1, 2, 3]
my_list # []

Действие метода эквивалентно выражению my_list[:] .

list.count(x) ¶

random_list = [4, 1, 5, 4, 10, 4]
random_list.count(4) # 3

Метод count считает количество значений x в списке.

list.extend(iterable) ¶

Дополняет список элементами из указанного объекта.

  • it : Объект, поддерживающий итерирование, элементами которого требуется дополнить список.
my_list = []
my_list.extend([1, 2, 3]) # None
my_list # [1, 2, 3]
my_list.extend('add') # None
my_list # [1, 2, 3, 'a', 'd', 'd']

Для добавления единственного элемента используйте append() .

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.index(x , start , end ) ¶

Метод возвращает положение первого индекса, со значением х . Также можно указать границы поиска start и end .

list.insert(i, x) ¶

Вставляет указанный элемент перед указанным индексом

  • i : Позиция (индекс), перед которой требуется поместить элемент. Нумерация ведётся с нуля. Поддерживается отрицательная индексация.
  • x : Элемент, который требуется поместить в список.
my_list = [1, 3]
my_list.insert(1, 2)
my_list # [1, 2, 3]
my_list.insert(-1, 4)
my_list # [1, 2, 4, 3]

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.pop( i ) ¶

Возвращает элемент на указанной позиции , удаляя его из списка.

  • i=None : Позиция искомого элемента в списке (целое число). Если не указана, считается что имеется в виду последний элемент списка. Отрицательные числа поддерживаются.
my_list = [1, 2, 3, 4, 5]
last = my_list.pop() # 5
my_list # [1, 2, 3, 4]
second = my_list.pop(-3) # 2
my_list # [1, 3, 4]
first = my_list.pop(0) # 1
my_list # [3, 4]

Чтобы удалить элемент из списка не возвращая его, воспользуйтесь list.remove() .

list.remove(x) ¶

Удаляет из списка указанный элемент.

  • x : Элемент, который требуется удалить из списка. Если элемент отсутствует в списке, возбуждается ValueError . Удаляется только первый обнаруженный в списке элемент, значение которого совпадает со значением переданного в метод.
my_list = [1, 3]
my_list.remove(1)
my_list # [3]
my_list.remove(4) # ValueError

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.reverse() ¶

Перестраивает элементы списка в обратном порядке.

my_list = [1, 'two', 'a', 4]
my_list.reverse() # None
my_list # [4, 'a', 'two', 1]

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.sort(key=None, reverse=False) ¶

Сортирует элементы списка на месте.

  • key=None : Функция, принимающая аргументом элемент, используемая для получения из этого элемента значения для сравнения его с другими.
  • reverse=False : Флаг, указывающий следует ли производить сортировку в обратном порядке.
my_list = [1, 'two', 'a', 4, 'a']
# Попытка упорядочить/сравнить несравнимые типы вызовет исключение
my_list.sort() # TypeError: unorderable types: str()
# Отсортируем «вручную», так чтобы 'а' были в конце.
my_list.sort(key=lambda val: val == 'a') # None
# Фактически мы отсортировали в соответствии
# с маской [False, False, False, True, True]
my_list # ['two', 4, 1, 'a', 'a']

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

Хотите выучить Python на практике?

Методы списка

В Python у списков имеется одиннадцать методов. Условно разделим их на группы:

  • увеличивающие количество элементов — append , extend , insert
  • уменьшающие количество элементов — clear , pop , remove
  • изменяющие порядок элементов — reverse , sort
  • методы «поиска» — index , count
  • копирование списка — copy

Методы append и extend производят добавление в конец списка. Разница между ними заключается в том, что с помощью append можно добавить только один элемент, в то время extend позволяет расширить список сразу на несколько. При этом оба метода принимают один аргумент. В случае extend это должна быть итерируемая последовательность (кортеж, список, строка и другое), каждый элемент которой станет отдельным элементом списка.

>>> lst = ['a', 45, 89, 'who'] >>> lst.append(67) >>> lst ['a', 45, 89, 'who', 67]
>>> b [1, 2, 3] >>> c = (9, 10) >>> b.extend(c) >>> b [1, 2, 3, 9, 10] >>> b.extend("abc") >>> b [1, 2, 3, 9, 10, 'a', 'b', 'c'] >>> b.extend([12, 19]) >>> b [1, 2, 3, 9, 10, 'a', 'b', 'c', 12, 19]

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

>>> lst.insert(0,10) >>> lst [10, 'a', 45, 89, 'who', 67, 'a1', (1, 2, 3)] >>> lst.insert(len(lst),10) >>> lst [10, 'a', 45, 89, 'who', 67, 'a1', (1, 2, 3), 10] >>> lst.insert(3, 10) >>> lst [10, 'a', 45, 10, 89, 'who', 67, 'a1', (1, 2, 3), 10]

Для удаления из списка одного элемента используют методы remove и pop . Метод remove принимает значение удаляемого элемента, и удаляет первое его вхождение. Если элемента нет в списке, возникает исключение ValueError . Метод pop удаляет элемент по индексу. При этом возвращает удаленное из списка значение в программу. Вызов pop() без аргументов удаляет и возвращает последний элемент. Метод pop генерирует исключение IndexError , если указан индекс за пределами диапазона индексов списка.

lst = [4, 3, 5, 1, 8, 1] d = int(input()) try: lst.remove(d) except ValueError: print('No the item') print(lst)
1 [4, 3, 5, 8, 1]
2 No the item [4, 3, 5, 1, 8, 1]
lst = ['a', 'f', 'b', 'x', 'y', 'k'] i = int(input()) try: value = lst.pop(i) except IndexError: value = 'Index Error' print(value)
10 Index Error

Метод clear удаляет все элементы из списка.

>>> a = [1, 2] >>> a.clear() >>> a []

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

>>> lst ['a', 10, 89, 'who', 67, 'a1', (1, 2, 3), 10] >>> lst.reverse() >>> lst [10, (1, 2, 3), 'a1', 67, 'who', 89, 10, 'a']

Метод sort выполняет сортировку списка на месте (список изменяется, а не возвращается новый). Если sort() вызывается без аргументов, сортировка происходит по возрастанию. Для сортировки по убыванию следует именованному параметру reverse присвоить True .

>>> li = [4, 1, 9, 5] >>> li.sort() >>> li [1, 4, 5, 9]
>>> st = [4, 2, 7, 5] >>> st.sort(reverse=True) >>> st [7, 5, 4, 2]

Для более сложных сортировок используется параметр key , которому присваивается функция, выполняющая действия над каждым элементом списка. Сортировка происходит на основе вернувшихся значений. Подробнее об этом в этой статье.

>>> n = [-4, 3, 9, -5, 2] >>> n.sort(key=lambda i: abs(i)) >>> n [2, 3, -4, -5, 9]

Метод count считает, сколько раз в списке встречается переданный аргумент.

>>> a = [1, 0, 1, 1, 0] >>> a.count(1) 3

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

>>> a = ['a', 'c', 'e', 'a', 'b'] >>> a.index('a') 0 >>> a.index('a', 2) 3 >>> a.index('a', 2, 4) 3 >>> a.index('a', 2, 3) Traceback (most recent call last): File "", line 1, in ValueError: 'a' is not in list

Метод copy создает поверхностную копию списка. Так при наличии вложенных списков копируются не они сами, а ссылки на них. В результате изменение вложенных списков через список-оригинал будет видно также в списке-копии.

>>> a = [1, 2] >>> b = a.copy() >>> b.append(3) >>> a [1, 2] >>> b [1, 2, 3]
>>> c = [1, 2, [3, 4]] >>> d = c.copy() >>> d.append(5) >>> c[2].append(6) >>> c [1, 2, [3, 4, 6]] >>> d [1, 2, [3, 4, 6], 5]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *