Python List Append VS Python List Extend - Разликата, обяснена с примери за метод на масив

Добре дошли

Ако искате да се научите как да работите с .append()и .extend()и да разберете разликите им, тогава сте попаднали на правилното място. Те са мощни методи за списъци, които определено ще използвате във вашите проекти на Python.

В тази статия ще научите:

  • Как и кога да използваме .append()метода.
  • Как и кога да използваме .extend()метода.
  • Основните им разлики.

Нека да започнем. ✨

🔸 Добавяне

Нека да видим как .append()методът работи зад кулисите.

Случаи на употреба

Трябва да използвате този метод, когато искате да добавите единичен елемент в края на списъка.

Съвети: Можете да добавяте елементи от всякакъв тип данни, тъй като списъците могат да имат елементи от различни типове данни.

Синтаксис и аргументи

За да извикате .append()метода, ще трябва да използвате този синтаксис:

От ляво на дясно:

  • Списъкът, който ще бъде модифициран. Това обикновено е променлива, която препраща към списък.
  • Точка, последвана от името на метода .append().
  • В скобите елементът, който ще бъде добавен в края на списъка.

💡 Съвети: Точката е много важна. Това се нарича "точкова нотация". Точката основно казва „извикайте този метод в този конкретен списък“, така че ефектът от метода ще бъде приложен към списъка, който се намира преди точката.

Примери

Ето пример за използване .append():

# Define the list >>> nums = [1, 2, 3, 4] # Add the integer 5 to the end of the existing list >>> nums.append(5) # See the updated value of the list >>> nums [1, 2, 3, 4, 5]

💡 Съвети: Когато използвате .append()първоначалния списък се променя. Методът не създава копие на списъка - той мутира оригиналния списък в паметта.

Нека се преструваме, че провеждаме изследване и че искаме да анализираме данните, събрани с помощта на Python. Трябва да добавим ново измерване към съществуващия списък със стойности.

Как да го направим? Използваме .append()метода!

Можете да го видите точно тук:

# Existing list >>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] # Add the float (decimal number) to the end of the existing list >>> nums.append(7.34) # See the updated value of the list >>> nums [5.6, 7.44, 6.75, 4.56, 2.3, 7.34]

Еквивалентно на...

Ако сте запознати с нарязването на низове, списъци или кортежи, това, което .append()наистина прави зад кулисите, е еквивалентно на:

a[len(a):] = [x]

С този пример можете да видите, че те са еквивалентни.

Използване .append():

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] >>> nums.append(4.52) >>> nums [5.6, 7.44, 6.75, 4.56, 2.3, 4.52]

Използване на нарязване на списък:

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] >>> nums[len(nums):] = [4.52] >>> nums [5.6, 7.44, 6.75, 4.56, 2.3, 4.52]

Добавяне на последователност

Сега, какво мислите за този пример? Какво мислите, че ще бъде изведено?

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] >>> nums.append([5.67, 7.67, 3.44]) >>> nums # OUTPUT?

Готов ли си? Това ще бъде резултатът:

[5.6, 7.44, 6.75, 4.56, 2.3, [5.67, 7.67, 3.44]]

Може би питате, защо пълният списък е добавен като един елемент? Това е така, защото .append()методът добавя целия елемент в края на списъка. Ако елементът е последователност като списък, речник или кортеж, цялата последователност ще бъде добавена като единичен елемент от съществуващия списък.

Тук имаме още един пример (по-долу). В този случай елементът е кортеж и се добавя като единичен елемент от списъка, а не като отделни елементи:

>>> names = ["Lulu", "Nora", "Gino", "Bryan"] >>> names.append(("Emily", "John")) >>> names ['Lulu', 'Nora', 'Gino', 'Bryan', ('Emily', 'John')]

🔹 Удължете

Сега нека се потопим във функционалността на .extend()метода.

Случаи на употреба

Трябва да използвате този метод, ако трябва да добавите няколко елемента към списък като отделни елементи .

Позволете ми да илюстрирам важността на този метод с познат приятел, който току-що научихте: .append()методът. Въз основа на наученото досега, ако искахме да добавим няколко отделни елемента към списък, използвайки .append(), ще трябва да използваме .append()няколко пъти, по следния начин:

# List that we want to modify >>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] # Appending the items >>> nums.append(2.3) >>> nums.append(9.6) >>> nums.append(4.564) >>> nums.append(7.56) # Updated list >>> nums [5.6, 7.44, 6.75, 4.56, 2.3, 2.3, 9.6, 4.564, 7.56]

Сигурен съм, че вероятно си мислите, че това не би било много ефективно, нали? Ами ако трябва да добавя хиляди или милиони стойности? Не мога да напиша хиляди или милиони редове за тази проста задача. Това би отнело вечно!

Така че нека видим алтернатива. Можем да съхраним стойностите, които искаме да добавим в отделен списък и след това да използваме цикъл for, за да извикаме .append()толкова пъти, колкото е необходимо:

# List that we want to modify >>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] # Values that we want to add >>> new_values = [2.3, 9.6, 4.564, 7.56] # For loop that is going to append the value >>> for num in new_values: nums.append(num) # Updated value of the list >>> nums [5.6, 7.44, 6.75, 4.56, 2.3, 2.3, 9.6, 4.564, 7.56]

Това е по-ефективно, нали? Пишем само няколко реда. Но има още по-ефективен, четим и компактен начин за постигане на същата цел .extend():!

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3] >>> new_values = [2.3, 9.6, 4.564, 7.56] # This is where the magic occurs! No more for loops >>> nums.extend(new_values) # The list was updated with individual values >>> nums [5.6, 7.44, 6.75, 4.56, 2.3, 2.3, 9.6, 4.564, 7.56]

Нека да видим как този метод работи зад кулисите.

Синтаксис и аргументи

За да извикате .extend()метода, ще трябва да използвате този синтаксис:

От ляво на дясно:

  • Списъкът, който ще бъде модифициран. Това обикновено е променлива, която се отнася към списъка.
  • Точка .(Засега всичко е точно същото както преди).
  • Името на метода extend. (Сега нещата започват да се променят ...).
  • В скобите итерация (списък, кортеж, речник, набор или низ), която съдържа елементите, които ще бъдат добавени като отделни елементи от списъка.

Съвети: Според документацията на Python, итерируемият се определя като „обект, способен да връща своите членове един по един“. Итерабилите могат да се използват в цикъл for и тъй като те връщат елементите си един по един, можем да „направим нещо“ с всеки един от тях, по един на итерация.

Зад сцената

Нека да видим как .extend()работи зад кулисите. Ето един пример:

# List that will be modified >>> a = [1, 2, 3, 4] # Sequence of values that we want to add to the list a >>> b = [5, 6, 7] # Calling .extend() >>> a.extend(b) # See the updated list. Now the list a has the values 5, 6, and 7 >>> a [1, 2, 3, 4, 5, 6, 7]

Можете да мислите .extend()за метод, който добавя отделните елементи на итерируемия в същия ред, в който се появяват.

В този случай имаме списък, a = [1, 2, 3, 4]както е показано на диаграмата по-долу. Имаме и списък, b = [5, 6, 7]който съдържа поредицата от стойности, които искаме да добавим. Методът взема всеки елемент на bи го добавя към списъка aв същия ред.

After this process is completed, we have the updated list a and we can work with the values as individual elements of a.

💡 Tips: The list b used to extend list a remains intact after this process. You can work with it after the call to .extend(). Here is the proof:

>>> a = [1, 2, 3, 4] >>> b = [5, 6, 7] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6, 7] # List b is intact! >>> b [5, 6, 7]

Examples

You may be curious to know how the .extend() method works when you pass different types of iterables. Let's see how in the following examples:

For tuples:

The process works exactly the same if you pass a tuple. The individual elements of the tuple are appended one by one in the order that they appear.

# List that will be extended >>> a = [1, 2, 3, 4] # Values that will be added (the iterable is a tuple!) >>> b = (1, 2, 3, 4) # Method call >>> a.extend(b) # The value of the list a was updated >>> a [1, 2, 3, 4, 1, 2, 3, 4]

For sets:

The same occurs if you pass a set. The elements of the set are appended one by one.

# List that will be extended >>> a = [1, 2, 3, 4] # Values that will be appended (the iterable is a set!) >>> c = {5, 6, 7} # Method call >>> a.extend(c) # The value of a was updated >>> a [1, 2, 3, 4, 5, 6, 7]

For strings:

Strings work a little bit different with the .extend() method. Each character of the string is considered an "item", so the characters are appended one by one in the order that they appear in the string.

# List that will be extended >>> a = ["a", "b", "c"] # String that will be used to extend the list >>> b = "Hello, World!" # Method call >>> a.extend(b) # The value of a was updated >>> a ['a', 'b', 'c', 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']

For dictionaries:

Dictionaries have a particular behavior when you pass them as arguments to .extend(). In this case, the keys of the dictionary are appended one by one. The values of the corresponding key-value pairs are not appended.

In this example (below), the keys are "d", "e", and "f". These values are appended to the list a.

# List that will be extended >>> a = ["a", "b", "c"] # Dictionary that will be used to extend the list >>> b = {"d": 5, "e": 6, "f": 7} # Method call >>> a.extend(b) # The value of a was updated >>> a ['a', 'b', 'c', 'd', 'e', 'f']

Equivalent to...

What .extend() does is equivalent to a[len(a):] = iterable. Here we have an example to illustrate that they are equivalent:

Using .extend():

# List that will be extended >>> a = [1, 2, 3, 4] # Values that will be appended >>> b = (6, 7, 8) # Method call >>> a.extend(b) # The list was updated >>> a [1, 2, 3, 4, 6, 7, 8] 

Using list slicing:

# List that will be extended >>> a = [1, 2, 3, 4] # Values that will be appended >>> b = (6, 7, 8) # Assignment statement. Assign the iterable b as the final portion of the list a >>> a[len(a):] = b # The value of a was updated >>> a [1, 2, 3, 4, 6, 7, 8]

The result is the same, but using .extend() is much more readable and compact, right? Python truly offers amazing tools to improve our workflow.

🔸 Summary of their Differences

Now that you know how to work with .append() and .extend(), let's see a summary of their key differences:

  • Effect: .append() adds a single element to the end of the list while .extend() can add multiple individual elements to the end of the list.
  • Argument: .append() takes a single element as argument while .extend() takes an iterable as argument (list, tuple, dictionaries, sets, strings).

I really hope that you liked my article and found it helpful. Now you can work with .append() and .extend() in your Python projects. Check out my online courses. Follow me on Twitter. ⭐️