Как добавить элементы в список в python (добавить, расширить и вставить)

Содержание:

Как преобразовать список в другие структуры данных в Python?

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

Как преобразовать список в строку

Преобразовать список в строку можно при помощи функции . Данная операция склеит все элементы нашего списка вместе и вернет строку. Более подробно об этом можно прочитать в .

# Преобразование списка строк в строку
listOfStrings = 
strOfStrings = ''.join(listOfStrings)
print(strOfStrings)
# Преобразование списка чисел в строку
listOfNumbers = 
strOfNumbers = ''.join(str(n) for n in listOfNumbers)
print(strOfNumbers)

Обратите внимание, что если ваш список содержит численные значения, то вы должны преобразовать их в строковые значения перед выполнением функции . Это показано во втором примере нашего кода

Для преобразования целого числа в строковое значение мы проходим циклом  по всему массиву чисел.

Как преобразовать список в кортеж

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

Помните, что кортежи это неизменяемый тип данных. После преобразования списка в кортеж в нем больше нельзя будет что-либо менять.

Как преобразовать список в множество

Как вы помните, множество — это неупорядоченная коллекция уникальных элементов. Таким образом, при преобразовании списка в множество будут потеряны не только возможные дубликаты в списке, но и порядок элементов.

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

Как преобразовать список в словарь

Словари в Python имеют дело с ключами и значениями, поэтому преобразование списка в словарь выглядит не таким явным. Допустим, у нас есть следующий список:

Нам нужно, чтобы пары элементов  и , а также  и  интерпретировались как пары ключ-значение. Чтобы это сделать, разобьем наш список на два одинаковых списка при помощи срезов и передадим эти два списка в функцию .

В результате получим:

Заметьте, что для вывода результата на экран мы обернули функцию  в функцию .

Теперь передадим функцию  в функцию , которая будет воспринимать элемент  как ключ, а элемент  как значение. Сходным образом,  будет интерпретирован как ключ, а  — как значение.

# Преобразуем в словарь
helloWorldDictionary = dict(zip(helloWorld, helloWorld))
# Выводим результат на экран
print(helloWorldDictionary)

В результате получится следующий словарь:

Если у вас список большой, то вероятно лучше будет сделать следующим образом:

a = 
# Создаем итератор списка
i = iter(a)
# Создаем и выводим на экран словарь
print(dict(zip(i, i)))

Результат:

Заметим, что из итерируемого объекта всегда можно получить итератор. Объект итератор, в котором реализован метод , содержит в себе информацию о том, на каком шаге сейчас проходит итерация и каким будет следующий элемент последовательности.

Append a text to file in Python

Suppose we have a file ‘sample.txt,’ and its contents are,

Hello this is a sample file
It contains sample text
This is the end of file

‘hello’

# Open a file with access mode 'a'
file_object = open('sample.txt', 'a')

# Append 'hello' at the end of file
file_object.write('hello')

# Close the file
file_object.close()
Hello this is a sample file
It contains sample text
This is the end of filehello

‘a’

Append a text to file in Python using ‘with open’ statement

We can open the file in append access mode i.e. ‘a’, using ‘with open’ statement too, and then we can append the text at the end of the file.
For example,

# Open a file with access mode 'a'
with open("sample.txt", "a") as file_object:
    # Append 'hello' at the end of file
    file_object.write("hello")
Hello this is a sample file
It contains sample text
This is the end of filehellohello

‘hello’‘sample.txt’‘with statement’

In both the above examples, the text gets added at the end of the file. But as we can see, it is not appended as a new line. There might be scenarios when we want to add data to a file as a new line.
Let’s see how to do that,

Дайте мне список, и я переверну мир

Так (или примерно так) говорил ещё Архимед, а кто мы такие, чтоб с ним спорить. Список — простой, понятный и надёжный инструмент: в любой непонятной ситуации попробуйте сначала применить список, и даже если он не подойдёт, то подскажет, как и чем решать задачу дальше. Обязательно посмотрите другие методы списков из официальной документации Python, чтобы они не оказались для вас сюрпризом на собеседовании.

Конечно, Python — это не только списки, и изучать его лучше на родном языке в компании единомышленников. Приходите на наш курс «Профессия Python-разработчик». Под руководством опытных наставников вы станете настоящим укротителем питонов повелителем списков, массивов и словарей, а заодно получите востребованную и высокооплачиваемую специальность.

Method 4: Using str.join()

  • The method is useful when you have a list of strings that need to be joined together into a single string value.
  • The method is called on a string, gets passed a list of strings, and returns a string.
  • The returned string is the concatenation of each string in the passed-in list.
  • A will be raised if there are any non-string values in iterable, including bytes objects.

In this example I will join variable a and b with a white space character as the separator

#!/usr/bin/env python3

a = 'Hello'
b = 'World'
res = " ".join((a, b))
print(res)

Output:

# python3 /tmp/append_string.py
Hello World

Remember that join() is called on a string value and is passed a list value.

#!/usr/bin/env python3

# Define variable
a = 

# string join() calls on is inserted between
# each string of the list argument.
res = " ".join((a))

# Print the Result
print(res)

The output from this script:

# python3 /tmp/append_string.py
1 2 3

Best Practices

Последние абзацы статьи будут посвящены лучшим решениям практических задач, с которыми так или иначе сталкивается Python-разработчик.

Как перевести список в другой формат?

Иногда требуется перевести список в строку, в словарь или в JSON. Для этого нужно будет вывести список без скобок.

Перевод списка в строку осуществляется с помощью функции join(). На примере это выглядит так:

В данном случае в качестве разделителя используется запятая.

Словарь в Python – это такая же встроенная структура данных, наряду со списком. Преобразование списка в словарь — задача тоже несложная. Для этого потребуется воспользоваться функцией . Вот пример преобразования:

JSON – это JavaScript Object Notation. В Python находится встроенный модуль для кодирования и декодирования данных JSON. С применением метода можно запросто преобразовать список в строку JSON.

Как узнать индекс элемента в списке?

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

В качестве аргумента передаем значение, а на выходе получаем его индекс.

Как посчитать количество уникальных элементов в списке?

Самый простой способ – приведение списка к (множеству). После этого останутся только уникальные элементы, которые мы посчитаем функцией

Как создать список числовых элементов с шагом

Создание списка числовых элементов с шагом может понадобиться не так и часто, но мы рассмотрим пример построения такого списка.

Шагом называется переход от одного элемента к другому. Если шаг отрицательный, произойдёт реверс массива, то есть отсчёт пойдёт справа налево. Вот так выглядит список с шагом.

Еще один вариант – воспользоваться генератором списков:

При разработке на языке Python, списки встречаются довольно часто. Знание основ работы со списками поможет быстро и качественно писать программный код .

Базовое использование

Как создать список

Пустой список создается при помощи пары квадратных скобок:

empty_list = []
print(type(empty_list)) # <class 'list'>
print(len(empty_list)) # 0

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

homogeneous_list = 
print(homogeneous_list) # 
print(len(homogeneous_list)) # 6

heterogeneous_list = 
print(heterogeneous_list) # 
print(len(heterogeneous_list)) # 2

Для создания списков также может
использоваться конструктор list:

empty_list = list()  # Создаем пустой список
print(empty_list)  # []
new_list = list("Hello, Pythonist!")  # Новый список создается путем перебора заданного итерируемого объекта.
print(new_list)  # 

Также при создании списков используется List Comprehension, к которому мы еще вернемся.

Обращение к элементам списка

Вывод всего списка:

my_list = 
print(my_list)  # 

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

print(my_list)  # 1
print(my_list)  # 2
print(my_list)  # 9

В Python для обращения к элементам можно
использовать и отрицательные индексы.
При этом последний элемент в списке
будет иметь индекс -1, предпоследний —
-2 и так далее.

print(my_list)  # 25
print(my_list)  # 16
print(my_list)  # 9

Распаковка списков (для python-3). Если
поставить перед именем списка звездочку,
все элементы этого списка будут переданы
функции в качестве отдельных аргументов.

my_list = 
print(my_list)  # 
print(*my_list)  # 1 2 9 16 25

words = 
print(words)  # 
print(*words)  # I love Python I love

Списки мутабельны

Списки — это изменяемые контейнеры.
То есть, вы можете изменять содержимое
списка, добавляя и удаляя элементы.

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

Создадим новый список из элементов списка , а индексы нужных элементов возьмем из списка :

my_list = 
my_index = 
my_new_list =  for i in my_index]
print(my_new_list)  # 

Связь с другими языками

pythonnet

Иногда возникает потребность запустить код, написанный на другом языке, через Python, например, в целях проверки работы какого-либо стороннего модуля или для оптимизации кода. Существует несколько библиотек, позволяющих сделать это, например, pythonnet позволяет запустить некоторую часть кода, написанную на C# в Python (pythonnet позволяет рассматривать множество элементов clr, как модули в python).

Создаем проект библиотеки классов C# в visual studio, создаем в неё нужный класс или методы (в случае примера класс, содержащий метод вычисления дискриминанта), создаем .dll и запускаем через pythonnet (более подробно тут):

Обращаемся к C# через Python

JPype

Для этих же целей существует библиотека, которая позволяет запустить Java код в Python. Эта библиотека называется — JPype. Рассмотрим пример работы библиотеки.

Для начала установим её pip install jpype1, далее создадим Java проект, который в будущем скомпилируем в .jar архив, в проекте необходимо создать пакет, в нём класс и прописать следующий код (код вычисляет объем цилиндра):

Теперь можно создать .jar решение проекта.

В python коде импортируем библиотеку jpype, запустим JVM и пропишем путь к созданному .jar архиву. Далее по аналогии с pythonnet импортируем необходимые пакеты и классы:

Таким образом, pythonnet и jpype — отличные решения для интеграции кода C# и Java в  Python проект.

Deleting Element(s) from dictionary using pop() method

In addition to the del keyword, you can also make use of dict.pop() method to remove an element from the dictionary. The pop() is a built-in method available with a dictionary that helps to delete the element based on the key given.

Syntax:

dict.pop(key, defaultvalue)

The pop() method returns the element removed for the given key, and if the given key is not present, it will return the defaultvalue. If the defaultvalue is not given and the key is not present in the dictionary, it will throw an error.

Here is a working example that shows using of dict.pop() to delete an element.

my_dict = {"username": "XYZ", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it.", "location":"Mumbai"}
my_dict.pop("username")
print(my_dict)

Output:

{'email': This email address is being protected from spambots. You need JavaScript enabled to view it.', 'location': 'Mumbai'}

Функции Python reduce() и map()

Мы можем использовать функцию map() вместе с функцией functools.reduce() для сравнения элементов данных двух списков.

Метод map() принимает в качестве аргументов функцию и итерацию, например список, кортеж, строку и т.д.

Он применяет переданную функцию к каждому элементу итерации, а затем возвращает объект карты, то есть итератор, в качестве результата.

Метод functools.reduce() применяет переданную функцию к каждому элементу итерируемого ввода рекурсивным образом.

Первоначально он применит функцию к первому и второму элементам и вернет результат. Тот же процесс будет продолжаться для каждого из элементов, пока в списке не останется элементов.

Как комбинация, функция map() применяет функцию ввода к каждому элементу, а функция reduce() гарантирует, что она применяет функцию последовательно.

Пример:

import functools 


l1 =  
l2 =  
l3 =  

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l2), True): 
    print ("The lists l1 and l2 are the same") 
else: 
    print ("The lists l1 and l2 are not the same") 

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True): 
    print ("The lists l1 and l3 are the same") 
else: 
    print ("The lists l1 and l3 are not the same") 

Выход:

The lists l1 and l2 are not the same
The lists l1 and l3 are the same

Restrictions on Key Dictionaries

Here is a list of restrictions on the key in a dictionary:

  • If there is a duplicate key defined in a dictionary, the last is considered. For example consider dictionary my_dict = {«Name»:»ABC»,»Address»:»Mumbai»,»Age»:30, «Name»: «XYZ»};.It has a key «Name» defined twice with value as ABC and XYZ. The preference will be given to the last one defined, i.e., «Name»: «XYZ.»
  • The data-type for your key can be a number, string, float, boolean, tuples, built-in objects like float, and functions.

    For example my_dict = {bin:»001″, hex:»6″ ,10:»ten», bool:»1″, float:»12.8″, int:1, False:’0′};

    Only thing that is not allowed is, you cannot defined a key in square brackets for example my_dict = {:»ABC»,»Address»:»Mumbai»,»Age»:30};

Method 1: Using + operator

We used operator earlier to print variables with strings. Well the same logic applies here. We intend to append two different variables into an existing string
In this example I have defined two variables with contains integer while contains string value

#!/usr/bin/env python3

# Define variable
age = 32
name = 'Deepak'

# Add variables with string
print('My name is ' + name + ' and I am ' + str(age) + ' years old.')

Now I have used operator to concatenate variable value with string. Since age is an integer, I had to use to change the variable type to string

Output:

# python3 /tmp/append_string.py
My name is Deepak and I am 32 years old.

This operator usage can be tedious if you have a long range of strings to append. But for simple use cases as above, this operator would be useful.

Accessing elements of a dictionary

The data inside a dictionary is available in a key/value pair. To access the elements from a dictionary, you need to use square brackets () with the key inside it.

Here is an example that shows to accesselements from the dictionary by using the key in the square bracket.

my_dict = {"username": "XYZ", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it.", "location":"Mumbai"}
print("username :", my_dict)
print("email : ", my_dict)
print("location : ", my_dict)

Output:

username : XYZ
email :  This email address is being protected from spambots. You need JavaScript enabled to view it.
location :  Mumbai

If you try to use a key that is not existing in the dictionary , it will throw an error as shown below:

my_dict = {"username": "XYZ", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it.", "location":"Mumbai"}
print("name :", my_dict)

Output:

Traceback (most recent call last):
File "display.py", line 2, in <module>
print("name :", my_dict)
KeyError: 'name'

Method 3: Using += Operator

  • We can also use operator which would append strings at the end of existing value also referred as
  • The expression is shorthand for , where and can be numbers, or strings, or tuples, or lists (but both must be of the same type).
  • In this example I have defined an empty global variable and I will append a range of strings (integers would be marked as string using ) into this variable
#!/usr/bin/env python3

# Define variable with empty string value
a = ''

for i in range(5):
    # append strings to the variable
    a += str(i)

# print variable a content
print(a)

The output from this python script would print a range from 0-4 which were stored in variable a

# python3 /tmp/append_string.py
01234

Как производить математические вычисления при помощи списков Python

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

Как вычислить средневзвешенное значение списка

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

Данное определение может показаться несколько туманным, поэтому его лучше разобрать на конкретном примере. Допустим, у нас есть два списка.

Тогда мы при помощи следующего кода можем легко вычислить средневзвешенное значение:

for c in range(len(cost)):
   cost = (cost * cases / sum(cases))
cost = sum(cost)
print(cost)

Результат:

Но есть и другие способы это сделать. Например, следующий:

sum(cost * cases / sum(cases) for c in range(len(cost)))

Или вот такой вариант:

sum(cost * cases for c in range(len(cost))) / sum(cases)

И наконец, мы можем вычислить средневзвешенное значение с помощью функции .

Для этого мы сначала создадим переменную  , в которую сохраним результат выполнения функции zip(), аргументами которой будут списки  и . В результате мы увидим список, состоящий только из кортежей. Первое значение каждого из кортежей будет из списка , что соответствует цене, а второе — из списка , что обозначает количество покупок по данной цене.

# Вот что функция `zip()` делает со списками
print(list(zip(cost, cases)))
# Вычисляем средневзвешенное значение
print(sum() / sum(cases))

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

Как посчитать квантиль

Квантили, наряду с максимумами и минимумами, используются для составления сводного анализа данных. Также выделяют 25%, 50% и 75% квантили (процентили), их еще называют 1, 2 и 3 квартиль соответственно.

Таким образом, вам необходимо вычислить минимум пять чисел, чтобы составить краткую справку по вашим данным. А именно: минимум, максимум, медиана и два квартиля.

Минимум и максимум найти несложно, но что насчет квартилей?

Это также просто. Допустим, у нас есть набор данных, состоящий из 25 наблюдений, отсортированный от минимума к максимуму.

  • 25% процентиль или, иначе говоря, первый квартиль, вычисляется посредством умножения  на . В результате получаем , при округлении в большую сторону . Это дает нам номер нашего наблюдения, который и будет искомым квартилем.
  • Тритий квартиль, он же 75% процентиль мы вычисляем, умножая  на . В результате получаем , что при округлении дает . Таким образом, мы получаем 19 элемент нашего списка, который и будет искомой величиной.
  • Медианное значение вычисляется при помощи умножения  на . После округления им будет 13 элемент нашего списка.

Но как это оформить в виде программы?

Самый простой способ — использовать NumPy. Вот пример вычисления медианного значения (он же 50% процентиль или второй квартиль):

# Импортируем библиотеку NumPy
import numpy as np
# Создаем массив
a = np.array()
# Вычисляем 50% процентиль нашего NumPy-массива
p = np.percentile(a, 50)
# Выводим результат
print(p)

Результат:

Как поэлементно суммировать списки

Допустим, у нас есть два списка:

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

При помощи базового Python

from operator import add
list(map(add, list1, list2))

В результате получаем следующий список: .

Или мы можем использовать представление списков вместе с функцией .

При помощи NumPy

Предыдущие примеры отлично работают с небольшими списками, но когда вы работаете с большими данными, лучше использовать NumPy.

Вам нужно будет импортировать библиотеку NumPy и конвертировать ваши списки в массивы NumPy.

# Импортируем библиотеку NumPy
import numpy as np
# Преобразуем списки в массивы NumPy 
vector1 = np.array()
vector2 = np.array()
# Поэлементно их суммируем
sum_vector = vector1 + vector2 
# Выводим результат
print(sum_vector)

Создание десктопных приложений и UI

EEL

Для работы с созданием графических приложений есть несколько популярных библиотек, в частности встроенный tkinter и Qt. Но когда необходимо сделать красивое, легковесное графическое приложение, то хотелось бы использовать что-то более мощное, например, html+css+js, именно с этим может помочь библиотека EEL. Она позволяет создать десктопное приложение, где в качестве графической оболочки используется html, css и js (можно использовать различные фреймворки), а в качестве языка для написания бэк-части используется Python (подробнее тут).

Приведем простой пример использования библиотеки. Python код:

Файл index.html:

И сама структура проекта должна выглядеть так:

Можно запустить файл main.py и убедиться, что всё работает:

Способы создания списка

Переходя к классическому примеру, создадим список, который в дальнейшем будем использовать и изменять. Существует несколько способов образования листингов.

Одним из них является применение встроенной функции list( ). Для этого нужно обработать любой объект, поддающийся итерации (строку, кортеж или же существующий список). В данном случае, строку.

Вот, что получается в исходе:

>>> list('список')

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

>>> s = []  # Пустой список
>>> l = , 2]
>>> s
[]
>>> l
, 2]

Следующим, третьим, способом образования листингов является так называемый генератор листингов.

Генератор листингов – это синтаксическая конструкция для создания листингов. Она схожа с циклом for.

>>> c = 
>>> c

С его помощью можно также составлять более объемные конструкции:

>>> c = 
>>> c

>>> c = 
>>> c

Однако такой способ генерации не всегда эффективен при составлении множества листингов. Поэтому целесообразно использовать для генерации листингов цикл for.

Если необходимо обратиться к какому-либо элементу из списка, то используются индексы. У каждого элемента свой индекс.

Индекс – это номер элемента в списке.

Если требуется наполнить листинг повторяющимися, одинаковыми элементами используется символ *.  Например, нужно добавить в листинг три одинаковых числа: * 3.

🔹 Эффект и возвращаемое значение

Этот метод Мутации (изменения) Оригинальный список в памяти. Это не возвращает новую копию списка, так как мы могли бы интуитивно думать, он возвращает Отказ Поэтому, просто позвонив в этот метод, вы изменяете исходный список.

В нашем предыдущем примере:

>>> musical_notes = 
>>> musical_notes.append("B")

Вы можете увидеть (ниже), что исходный список был изменен после добавления элемента. Последний элемент сейчас И исходный список теперь модифицированная версия.

>>> musical_notes

Вы можете подтвердить, что возвращаемое значение это Назначая это значение для переменной и печати его:

>>> musical_notes = 
>>> a = musical_notes.append("B")
>>> print(a)
None

Deleting element(s) in a dictionary

To delete an element from a dictionary, you have to make use of the del keyword.

The syntax is :

del dict  # This will remove the element with your key.

To delete the entire dictionary, you again can make use of the del keyword as shown below:

del my_dict  # this will delete the dictionary with name my_dict

To just empty the dictionary or clear the contents inside the dictionary you can makeuse of clear() method on your dictionaryas shown below:

your_dict.clear()

Here is a working example that shows the deletion of element, to clear the dict contents and to delete entire dictionary.

my_dict = {"username": "XYZ", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it.", "location":"Mumbai"}
del my_dict  # it will remove "username": "XYZ" from my_dict
print(my_dict)
my_dict.clear()  # till will make the dictionarymy_dictempty
print(my_dict)
delmy_dict # this will delete the dictionarymy_dict
print(my_dict)

Output:

{'email': This email address is being protected from spambots. You need JavaScript enabled to view it.', 'location': 'Mumbai'}
{}
Traceback (most recent call last):
  File "main.py", line 7, in <module>
    print(my_dict)
NameError: name 'my_dict' is not defined

Производительность

Вы можете задаться вопросом, что является более производительным, поскольку append можно использовать для достижения того же результата, что и extension. Следующие функции делают то же самое:

Итак, давайте их время:

Обращение к комментарию о времени

Комментатор сказал:

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

Хорошо, давайте создадим эксперимент, чтобы увидеть, как это работает во времени:

И мы видим, что выход из нашего пути создания итерируемого только для использования расширения — это (незначительная) тратавремя:

Из этого мы узнаем, что ничего не получится от использования , когда у нас есть только один элемент для добавления .

Кроме того, эти сроки не так важны. Я просто показываю им, что в Python выполнение семантически правильной вещи — это выполнение Right Way .

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

Вопрос 9. Чем список отличается от других структур?

Сложность: (> ⌒ <)

Такие вопросы надо отбивать особенно чётко. Если спрашивающий не услышит конкретные ключевые слова, его подозрительность повысится, а ваши шансы, наоборот, снизятся.

Список и кортеж (tuple)

Список можно менять после создания (например, с помощью функции append()), а кортеж нет: он защищает данные от изменений после создания. По этой причине кортеж можно использовать в качестве ключа в словарях, а список нельзя. Кроме того, кортеж обрабатывается интерпретатором Python чуть быстрее.

Список и множество (set)

Список упорядочен: каждый элемент списка имеет индекс, а элемент множества — нет. Список может содержать одинаковые значения, а во множестве каждое значение уникально. Проверка, принадлежит ли элемент множеству, выполняется быстрее, чем такая же проверка элемента списка.

Список и словарь (dictionary)

Словарь состоит из пар «ключ-значение», а список может состоять и из одиночных элементов, и из пар, и из троек — если элементами будут другие списки или кортежи. Ключи у словаря должны быть уникальными и иметь неизменяемый тип, у списка таких ограничений нет. Поиск по словарю быстрее, чем по списку.

Список и массив (array)

Для использования массива нужно вызывать библиотеку array, а списки встроены в Python. В массиве могут содержаться элементы только одного типа. Массив не может содержать другие массивы или списки. Массив занимает меньше памяти и поэтому быстрее, чем одномерный список.

Оценка производительности

pympler

Потребление памяти в Python отдельная проблема, которой можно посвятить много времени, поэтому зачастую приходится следить за тем, чтобы python не сожрал всю оперативку. Для проверки памяти есть замечательный модуль pympler, который поможет не только посмотреть память, занимаемую объектом, но также поможет проследить за памятью, которую занимают отдельные классы или типы данных:

Проследим за изменением памяти, занимаемой классом A:

И в целом за памятью, занимаемой различными структурами

py-spy

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

В таком случае можно воспользоваться библиотекой py-spy, она позволяет без остановки программы проверить, сколько времени какие процессы в ней занимают. Установить библиотеку можно через pip install py-spy. Усложним код предыдущей программы, создадим дополнительный модуль sec.py:

модуль main.py:

Теперь через терминал достаточно прописать команду py-spy top — python main.py и вы будете получать информацию о времени работы каждого метода программы:

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

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

Adblock
detector