Списки (list) в python с примерами
Содержание:
- Использование формата JSON
- Итерация по списку в Python С использованием цикла и диапазона
- Генерация случайных чисел (модуль random)
- Примеры
- 4. В чем разница между методами append() и extend()?
- List Comprehension
- sort(ключ, реверс)
- Метод collection.counter()
- Использование оператора *
- Генератор списка с одним и несколькими условиями if и else
- 3. Как преобразовать список в другие структуры данных в Python?
- Итерация по Списку в Python С Помощью Метода Enumerate
- Создание списка
- Вложенные циклы в генераторах списков
- Списки
- Нарезка списка
- Понимание списка – удалить элементы условно
- Конвертировать список кортежей ключей, чтобы определить
- Как работает вложенный список в Python?
- Методы списков в Python
- Список Python POP () Безопасность потока
- Заключение
Использование формата JSON
Двоичный формат данных, который использует pickle, специфичен для Python. Чтобы улучшить взаимодействие между различными программами, нотация объектов JavaScript (JSON) предоставляет простую в использовании и удобочитаемую схему и, таким образом, стала очень популярной.
В следующем примере показано, как записать список смешанных типов переменных в выходной файл с помощью модуля json. В строке 4 определен базовый список. Открыв выходной файл для записи в строке 7, метод dump() сохраняет базовый список в файле, используя JSON.
import json # define list with values basicList = # open output file for writing with open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)
Чтение содержимого выходного файла обратно в память так же просто, как запись данных. Соответствующий метод для dump() называется load() и работает следующим образом:
import json # open output file for reading with open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)
Итерация по списку в Python С использованием цикла и диапазона
Шестой метод итерации по списку – это использование диапазона и любого цикла в Python. Метод range можно использовать как комбинацию с циклом for для обхода и итерации по списку. Функция range() возвращает последовательность цифр, начинающуюся с 0 (по умолчанию) и по умолчанию увеличивающуюся на 1, и останавливается перед указанным числом.
Синтаксис
начало | (Необязательно). Конкретное число, с которого нужно начать. Значение по умолчанию равно 0 |
остановка | (Обязательно). Номер, указывающий, в какой позиции остановиться (не входит в комплект). |
шаг | (Необязательно). шаг используется для указания приращения. Значение по умолчанию-1. |
Примечание: Метод range не включает стоп-номер в результирующую последовательность.
Объяснение
Здесь в приведенном выше примере сначала мы инициализировали и создали список с элементами . После этого мы должны найти длину списка с помощью функции len. Список длины равен 7, поэтому теперь значение переменной length равно 7.
Теперь, когда часть цикла приходит сюда, мы используем цикл for в сочетании с функцией range. В приведенном выше примере аргументом length в функции range является параметр stop. Значение длины здесь равно 7, поэтому цикл будет работать от 0 до 6, так как мы уже знаем, что стоп-значение исключается при использовании функции range .
Генерация случайных чисел (модуль random)
Python порождает случайные числа на основе формулы, так что они на самом деле не случайные, а, как говорят, псевдослучайные.
Модуль random позволяет генерировать случайные числа и имеет большое множество важных для практики функций. Рассмотрим основные функции:
random.random() - случайное число от 0 до 1.
random.randint(A, B) - случайное целое число N, A ≤ N ≤ B.
random.shuffle(list) перемешивает список случайным образом
random.choice(list) возвращает один случайный элемент из списка
Примеры
Функцияrandom.random()случайное число от 0 до 1.
import randomnumber = random.random() # значение от 0.0 до 1.0print(number)number = random.random() * 100 # значение от 0.0 до 100.0print(number)
Функция random.randint(A, B) — случайное целое число N, A ≤ N ≤ B
import randomnumber = random.randint(20, 35) # значение от 20 до 35print(number)
функция random.shuffle(list) перемешивает список случайным образом
import randomnumbers = # списокrandom.shuffle(numbers)print('numbers shuffle:',numbers)
Результат работы программы:
numbers shuffle:
функция random.choice(list) возвращает один случайный элемент из списка
numbers = random_number = random.choice(numbers)print('random_number:', random_number)
4. В чем разница между методами append() и extend()?
Давайте возьмемся за этот вопрос, вернувшись к концепции итерируемости, которую мы объяснили в начале нашей статьи.
Не забывайте, что мы называем переменную итерируемой, если программа может производить итерации по ней. Иными словами, итерируемая переменная представляет из себя последовательность элементов. Как вы, вероятно, уже прочли в начале статьи, списки являются последовательностями, а все экземпляры последовательностей в Python являются итерируемыми.
Совет: чтобы проверить, является ли переменная итерируемой, воспользуйтесь методом __iter__. Вот пример такого кода:
# Эта ваш список list = # Проверим, итерируемый он или нет list.__iter__
Запустите данный код самостоятельно и убедитесь, что списки являются итерируемыми объектами.
Теперь, держа в уме концепцию итерируемости, начнем постигать разницу между этими двумя методами. Метод , с одной стороны, принимает итерируемую переменную (скажем, список, кортеж или множество) и по одному добавляет к исходному списку элементы этой итерируемой последовательности.
Метод , с другой стороны, просто добавляет свой аргумент к концу исходного списка как единичный элемент. То есть, принимая в качестве аргумента итерируемую переменную, метод обрабатывает ее как единичный объект.
На примере следующего кода очень легко увидеть и понять разницу в работе этих методов:
# Добавляем список в список `shortList` shortList.append() # Используем метод print() для вывода shortList на экран print(shortList) # Расширяем `longerList` при помощи списка longerList.extend() # Используем метод print() для вывода longerList на экран print(longerList)
Результат:
List Comprehension
List Comprehension это создание списка путем итерации в цикле уже существующего списка (с соблюдением указанных условий). Поначалу такой подход может казаться сложным, но когда разберетесь, вы поймете, насколько это просто и быстро.
Чтобы разобраться в list comprehension, нужно
для начала обратиться к обычной итерации
списка. В следующем простом примере
показано, как вернуть новый список,
состоящий только из четных чисел старого.
# просто любой список чисел some_list = # пустой список, который будет заполняться четными числами из первого списка even_list = [] for number in some_list: if number % 2 == 0: even_list.append(number) print(even_list) #
Давайте разберем этот пример. Сначала мы создаем список с числами. Затем создаем пустой список, в котором будут сохраняться результаты, полученные в цикле. Дальше идет сам цикл, в котором мы перебираем числа из первого списка и проверяем, являются ли они четными. Если число делится на 2 без остатка, мы добавляем его в список четных чисел. Для получения нужного результата нам потребуется 5 строк кода (без учета комментариев), да еще пробелы.
А теперь давайте посмотрим пример, в
котором мы делаем все то же самое, но с
помощью list comprehension.
# просто любой список чисел some_list = # List Comprehension even_list = print(even_list) #
Давайте возьмем еще пример. Создадим
список, каждый элемент которого будет
элементом старого списка, умноженным
на 7.
my_starting_list = my_new_list = [] for item in my_starting_list: my_new_list.append(item * 7) print(my_new_list) #
С помощью list comprehension можно достичь
того же результата:
my_starting_list = my_new_list = print(my_new_list) #
Вообще list comprehension пишется в соответствии
со следующей формулой:
В блоке вы указываете, что конкретно нужно сделать с элементом, который возвращает итерация объекта. В нашем примере это , но операция может быть любой, как очень простой, так и очень сложной.
В блок нужно вставить имя объекта, который вы будете перебирать в цикле. В нашем примере это был список, но мог быть кортеж или диапазон.
List
comprehension добавляет элемент из существующего
списка в новый, если соблюдается какое-то
условие. Этот способ лаконичнее, а в
большинстве случаев еще и намного
быстрее. Иногда применение list comprehension
может ухудшить читаемость кода, поэтому
разработчику нужно действовать по
ситуации.
Примеры использования list comprehension с условиями
Вносим в новый список только четные
числа:
only_even_list = print(only_even_list) #
Это эквивалентно следующему циклу:
only_even_list = list() for i in range(13): if i%2 == 0: only_even_list.append(i) print(only_even_list) #
List
comprehension может также содержать вложенные
if-условия
Обратите внимание на следующий
пример:
divisible = list() for i in range(50): if i % 2 == 0: if i % 3 == 0: divisible.append(i) print(divisible) #
С применением list comprehension этот код можно
переписать следующим образом:
divisible = print(divisible) #
С list comprehension также может использоваться if-else. В следующем примере мы берем диапазон чисел от 0 до 10 и добавляем в наш список все четные числа из этого диапазона, а нечетные добавляем после умножения на -1.
list_1 = print(list_1) #
Подписаться
×
sort(ключ, реверс)
Эта функция используется для сортировки элементов. Элементы списка должны реализовывать функцию __lt __ (self, other).
Мы можем указать имя функции как ключ, который будет использоваться для сортировки. Таким образом, мы можем определить нашу собственную пользовательскую функцию, которая будет использоваться для сортировки элементов.
reverse принимает логическое значение. Если True, то список сортируется в обратном порядке. Значение по умолчанию Reverse — False, и элементы сортируются в естественном порядке.
>>> list_num = >>> list_num.sort() >>> list_num >>> list_num.sort(reverse=True) >>> list_num >>>
Метод collection.counter()
Метод collection.counter() может использоваться для сравнения списков. Функция counter() подсчитывает частоту элементов в списке и сохраняет данные в виде словаря, представленного в формате <значение>: <частота>. Если два списка имеют одинаковый выходной словарь, то они одинаковы.
Примечание: порядок элементов списка не влияет на результат работы метода counter().
Пример
import collections l1 = l2 = l3 = if collections.Counter(l1) == collections.Counter(l2): print ("Списки l1 и l2 одинаковые") else: print ("Списки l1 и l2 неодинаковые") if collections.Counter(l1) == collections.Counter(l3): print ("Списки l1 и l3 одинаковые") else: print ("Списки l1 и l3 неодинаковые")
Вывод
Списки l1 и l2 неодинаковые Списки l1 и l3 одинаковые
Использование оператора *
Если вы никогда не использовали оператор * в списке или других типах данных, таких как кортеж, вы будете рады узнать, насколько он полезен. Он используется для распаковки списка. Например-
list1= print(*list1)
Output- 1 2 3 4 5
Разве это не прекрасно? Лично я нахожу этого оператора очень полезным. Теперь давайте посмотрим, как оператор * можно использовать для объединения различных списков в python.
list1= list2= list3= print(list3)
Output-
Если мы хотим, мы можем использовать это для объединения различных списков в кортеж или набор.
list1= list2=,list2 print(new_tuple) print("type: ",type(new_tuple))
Output- (1, 2, 3, 4, 5, 6, 7, 8, 9) type:
list1= list2= new_set={list1,list2} print(new_set) print("type: ",type(new_set))
Output- {1, 2, 3, 4, 5, 6, 7, 8, 9} type:
Генератор списка с одним и несколькими условиями if и else
Хорошо, теперь давайте посмотрим, как мы можем добавить после в генератор списка. Напишем простой генератор списка, который будет сохранять в список все значения , большие 4. Если же какое-то значение меньше 4, вместо него будет сохранена строка .
lst = # с условиями if и else e = print(e) # Результат: #
Следующий код выполняет ту же задачу:
for x in lst: if x > 4: d.append(x) else: d.append('less than 4')
А теперь давайте посмотрим, как работают генераторы списков с несколькими и .
В приведенном ниже примере мы сохраняем строку , если значение кратно 2. А если значение кратно 3, мы сохраняем . Во всех остальных случаях мы сохраняем .
f = print(f) # Результат: #
Как это работает? Чтобы понять это, мы можем разделить всё условие на три части, после каждого else:
Таким образом, если первое условие истинно, тогда элемент будет принимать значение – в противном случае мы вместо сохранения какого-либо значения перейдем ко второму условию . По такому же принципу работает команда . Во втором if-условии в элемент сохранится , если утверждение истинно. В противном случае программа проверит следующее условие. Этого условия у нас нет, поэтому элементу будет присвоено значение, идущее сразу после else, — .
Мы можем добиться того же результата, написав код следующим образом:
for x in lst: if x%2 == 0: f.append('Two') elif x%3 == 0: f.append('Three') else: f.append('not 2 & 3')
Теперь-то вы видите силу генератора списков? Он выполняет задачу всего в одной строке, в то время как традиционный цикл состоит из 7.
3. Как преобразовать список в другие структуры данных в 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)))
Результат:
Заметим, что из итерируемого объекта всегда можно получить итератор. Объект итератор, в котором реализован метод , содержит в себе информацию о том, на каком шаге сейчас проходит итерация и каким будет следующий элемент последовательности.
Итерация по Списку в Python С Помощью Метода Enumerate
Четвертый способ в нашем списке-это итерация с использованием метода enumerate. Если вы не знаете, что именно enumerate делает в python, то позвольте мне объяснить вам.Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает его. И что бы ни возвращал метод enumerate, это будет объект enumerate.
Основное преимущество использования метода enumerate заключается в том, что вы можете преобразовать объекты enumerate в list и tuple с помощью методов list() и tuple() соответственно.
Синтаксис
Метод enumerate() принимает два параметра:
- iterable – последовательность, итератор или объект.
- start (необязательно) – начинает отсчет с этого числа. Если start опущен, то 0 принимается за start.
Объяснение
Здесь, таким образом, для итерации списка мы использовали метод enumerate. Сначала мы инициализировали и создали список. Список содержит семь элементов. После создания списка мы используем цикл for здесь для циклического перебора каждого элемента списка. Переменная ‘i’ здесь используется для подсчета количества раз, когда выполняется цикл for. Функция enumerate(list) здесь будет перебирать каждый элемент в списке, а также выводить число, включающее индекс каждого элемента.
Создание списка
Списки обычно создаются путем помещения элементов в квадратные скобки , разделенных запятыми. В них может быть любое количество предметов, которые могут быть разных типов. Вот пример:
Квадратные скобки без элементов между ними обозначают пустой список:
Хотя списки Python обычно однородны, у вас могут быть элементы со смешанными типами данных:
Вы также можете объявить вложенные списки, в которых один или несколько элементов также являются списками:
Несколько элементов могут иметь одно и то же значение:
Списки также могут быть построены с использованием понимания конструктора и других встроенных функций, таких как .
Вложенные циклы в генераторах списков
Вложенные циклы используются в программах для выполнения множества итераций.
Рассмотрите следующий цикл for и подумайте, как использовать его в генераторе.
Такой код создаст новый список, который итерирует два других списка и выполнит на их основе математические операции. Код вложенного цикла for выглядит так:
Результат будет таким:
Этот код умножает элементы первого списка на элементы второго списка при каждой итерации.
Чтобы преобразовать цикл в генератор, нужно объединить тело цикла в одну строку, начиная с операции x * y. Далее будут следовать внешний и внутренний цикл for. Добавьте выражение print(), чтобы просмотреть список и убедиться, что он совпадает со списком, полученным с помощью предыдущего цикла for.
Генератор списка объединяет вложенные циклы for в одну строку кода и получает такой же список.
Списки
Списки Python схожи с массивами в других языках. В Python, пустой список может быть создан следующим образом:
Python
my_list = []
my_list = list()
1 2 |
my_list= my_list=list() |
Как вы видите, вы можете создать список при помощи квадратных скобок, или при помощи встроенного инструмента Python – list. Список состоит из таких элементов, как строки, цифры, объекты и смеси типов. Давайте взглянем на несколько примеров:
Python
my_list =
my_list2 =
my_list3 =
1 2 3 |
my_list=1,2,3 my_list2=»a»,»b»,»c» my_list3=»a»,1,»Python»,5 |
Первый список содержит 3 числа, второй 3 строки, третий содержит смесь. Вы также можете создавать списки списков, вот так:
Python
my_nested_list =
print(my_nested_list) # , ]
1 2 |
my_nested_list=my_list,my_list2 print(my_nested_list)# , ] |
В какой-то момент вам может понадобиться скомбинировать два списка вместе. Первый способ сделать это – при помощи метода extend:
Python
combo_list =
one_list =
a = combo_list.extend(one_list)
print(a) #
1 2 3 4 5 |
combo_list=1 one_list=4,5 a=combo_list.extend(one_list) print(a)# |
Немного проще будет просто добавить два списка вместе.
Python
my_list =
my_list2 =
combo_list = my_list + my_list2
print(combo_list) #
1 2 3 4 5 |
my_list=1,2,3 my_list2=»a»,»b»,»c» combo_list=my_list+my_list2 print(combo_list)# |
Да, это именно настолько просто. Вы также можете сортировать список. Давайте уделим немного времени и взглянем на то, как это делается:
Python
alpha_list =
alpha_list.sort()
print(alpha_list) #
1 2 3 4 |
alpha_list=34,23,67,100,88,2 alpha_list.sort() print(alpha_list)# |
Получилось. Видите? Давайте взглянем на еще один пример, чтобы закрепить результат:
Python
alpha_list =
sorted_list = alpha_list.sort()
print(sorted_list) # None
1 2 3 4 |
alpha_list=34,23,67,100,88,2 sorted_list=alpha_list.sort() print(sorted_list)# None |
В этом примере мы попытались назначить сортированный список переменной. Однако, когда вы вызываете метод sort() в списке, он сортирует список на месте. Так что если вы попробуете назначить результат другой переменной, тогда возникнет объект None, который аналогичен объекту Null в других языках. Таким образом, когда вам нужно отсортировать что-нибудь, просто помните, что вы сортируете на месте, и вы не можете назначить объект другой переменной.Вы можете разрезать список также, как вы делаете это со строкой:
Python
a = alpha_list
print(a) #
1 2 |
a=alpha_list3 print(a)# |
Данный код выдает список из трех первых элементов.
Нарезка списка
В Python вы можете разрезать список, используя следующую форму:
- Первый аргумент указывает индекс, с которого начинается извлечение. Когда используется отрицательный индекс, он указывает смещение от конца списка. Если этот аргумент опущен, нарезка начинается с индекса 0.
- Второй аргумент указывает индекс, до которого следует завершить извлечение; результат не включает элемент «стоп». Когда используется отрицательный индекс, он указывает смещение от конца списка. Если этот аргумент опущен или превышает длину списка, нарезка переходит в конец списка.
- Третий аргумент является необязательным и указывает шаг нарезки. Когда аргумент «шаг» не используется, по умолчанию он равен 1. Когда используется отрицательное значение, срез принимает элементы в обратном порядке.
Результатом нарезки списка является новый список, содержащий извлеченные элементы, а исходный список не изменяется.
Все следующее является допустимым синтаксисом Python:
Ниже приведен базовый пример того, как разрезать список, начиная с элемента с индексом 1 и заканчивая элементом с индексом 4, но не включая его:
Понимание списка – удалить элементы условно
Хорошо, это вроде мошенничество, потому что этот метод на самом деле не удаляет элементы из объекта списка. Это просто создает новый список с некоторыми элементами, которые соответствуют вашему состоянию.
Понимание списка является компактным способом создания списков. Простая формула .
- Выражение: Что делать с каждым элементом списка?
- Контекст: в каком списке элементы выбрать? Он состоит из произвольного количества для и если утверждения.
Пример Создает список .
Вы также можете определить состояние, такое как все нечетные значения в контексте, используя состояние, если. Это приводит нас к способу удаления всех элементов, которые не соответствуют определенным условиям в данном списке.
>>> lst = list(range(10)) >>> lst_new = >>> lst_new
Пока вы повторяете весь список , состояние требует, чтобы элементы нечетными.
Связанные статьи в блоге:
Проверьте мой полный урок понимания списка для максимального обучения!
Конвертировать список кортежей ключей, чтобы определить
Проблема : Как преобразовать список кортежей в словарь в Python с использованием первых ценностей кортежей в качестве словарных клавиш и второе значения кортежа в качестве значений словаря.
Пример : Мы принимаем список кортежей цвета змеи, в качестве примера.
snake_colors =
Решение : На самом деле эта проблема еще проще решать как первую, потому что работа перечисления функций уже сделана, все, что нам нужно сделать, это добавить записи в словарь.
Такой список можно сопоставить на словарь, просто позвонив Конструктор с этим списком в качестве аргумента. Таким образом, весь код будет такой же простой, как это:
d = dict(snake_colors)
Как работает вложенный список в Python?
После публикации первой версии этой статьи многие читатели попросили меня написать последующую статью о состоянии вложенного списка в Python. Есть две интерпретации вложенного списка понимания:
- Приходя с компьютерной науки, я предполагал, что «комплекс вложенного списка» относится к созданию Список списков Отказ Другими словами: Как создать вложенный список с пониманием списка?
- Но после немного исследований я узнал, что есть вторая интерпретация вложенного списка понимания: Как использовать вложенное для петли в списке понимание?
Давайте сначала погрузимся в первую интерпретацию.
Как создать вложенный список с пониманием списка?
Можно создать вложенный список с пониманием списка в Python. Что такое вложенный список? Это список списков. Вот пример:
## Nested List Comprehension lst = for y in range(3)] print(lst) # , , ]
Вы также можете визуализировать поток выполнения этого кода, нажав Далее в браузере:
Как видите, мы создаем список с тремя элементами. Каждый элемент списка – это список самостоятельно.
Все становится ясно, когда мы вернемся к нашей магической формуле понимания списка: Отказ Часть выражения генерирует новый список, состоящий из 5 целые числа Отказ Контекстная часть повторяет это три раза. Следовательно, каждый из трех вложенных списков имеет пять элементов.
Если вы продвинутый программист, вы можете спросить, есть ли здесь некоторое псевдонирование. Псевдонимы в этом контексте означает, что три элемента списка указывают на тот же список
l.append(5) print(l) # , , ] # ... and not , , ]
Как использовать вложенное для петли в списке понимание?
Быть Фрэнком, последний – это супер-простые вещи. Вы помните формулу понимания списка (= )?
Контекст представляет собой произвольную комплексную конструкцию ограничения для циклов и если ограничения с целью указания элементов данных, на которых следует применять выражение.
В выражении вы можете использовать любую переменную, которую вы определяете в цикле для цикла в контексте. Давайте посмотрим на пример.
Предположим, вы хотите использовать список пониманий, чтобы сделать этот код более лаконичным (например, вы хотите найти все возможные пары пользователей в вашей социальной сети):
# BEFORE users = pairs = [] for x in users: for y in users: if x != y: pairs.append((x,y)) print(pairs) #
Теперь этот код – беспорядок! Как мы можем исправить это? Просто используйте вложенный список!
# AFTER pairs = print(pairs) #
Как видите, мы делаем точно так же, как и с непонятым вложенным списком. Единственное отличие состоит в том, чтобы написать два цикла и оператора IF в одной строке в рамках записи списка []
Методы списков в Python
Помимо уже названных встроенных функций Python имеет еще и несколько специальных методов для работы со списками. С помощью этих методов можно осуществлять разные полезные операции.
Давайте подумаем о списках покупок. Какие операции мы с ними проделываем чаще всего?
- Добавляем элементы (по одному или несколько сразу)
- Удаляем элементы
- Меняем порядок элементов.
Как добавлять элементы в список
Мы можем добавлять элементы, вставляя их по одному в конец списка. Это делается при помощи метода . Давайте добавим в наш .
shopping_list.append('grapes') print(shopping_list) >>
Что, если бы мы захотели добавить в список элементы из другого списка (или другого итерируемого объекта)? Вместо того чтобы добавлять их по одному, мы можем воспользоваться методом и добавить все элементы одного объекта в другой.
shopping_list.extend() print(shopping_list) >> ['apples', 'pens', 'candy', 'notepad', 'brushes', 'paint', 'grapes', 'protein bars', 'cheese'
Примечание. Есть существенная разница между методами и и оператором конкатенации .
Оператор создает новый список, комбинируя списки, указанные в качестве операндов. А методы и изменяют список, для которого они вызваны, и не возвращают новых списков.
Как удалять элементы из списка
Мы можем удалять элементы из списка по одному или даже группами.
Метод возвращает последний элемент списка и удаляет его, как показано ниже. Последним элементом в списке был , а после применения метода его не стало.
last_element = shopping_list.pop() print(shopping_list) print(last_element) # Вывод >> >> cheese
Если бы мы хотели удалить элемент под определенным индексом, этот индекс можно было бы передать в метод в качестве аргумента.
not_needed = shopping_list.pop(2) print(not_needed) # Вывод >> candy
Если нам не нужен доступ к значению удаляемого элемента, можно воспользоваться функцией .
При этом можно указать как индекс элемента, который нужно удалить, так и срез — чтобы удалить все элементы в указанном диапазоне.
del shopping_list print(shopping_list) # Вывод >>
Предположим, мы знаем, какой именно товар в списке покупок мы передумали покупать, но не знаем, какой у него индекс. В подобных случаях можно воспользоваться методом и удалить элемент по значению.
В нашем примере элемент под индексом 1 — это . Если бы мы не знали индекс , мы могли бы просто написать и получить такой же результат, как в примере кода выше.
Для удаления всех элементов из списка можно использовать .
Примечание. При попытке удалить элемент, которого нет в списке, мы получим ValueError.
Список Python POP () Безопасность потока
У вас есть несколько потоков, которые одновременно получают доступ к вашему списку? Тогда вы должны быть уверены, что операции списка (например, ) на самом деле резьба безопасна Отказ
Другими словами: вы можете позвонить в Операция в двух потоках в том же списке одновременно? (И вы можете быть уверены, что результат является значимым?)
Ответ да (если вы используете Mokef Cpython внедрение). Причина – Питона Блокировка глобального интерпретатора Это гарантирует, что поток, работающий в данный момент в этом коде, сначала завершит текущую базовую операцию Python, как определено реализацией CPYPHON. Только если оно завершится с помощью этой операции, сможет получить следующий поток для доступа к вычислительному ресурсу. Это обеспечивается сложной схемой блокировки в результате реализации CPYPHON.
Единственное, что вам нужно знать, состоит в том, что каждая основная операция в реализации CPYPHON является атомный Отказ Он выполнен полностью и сразу, прежде чем любой другой поток имеет возможность запустить на одном виртуальном двигателе. Поэтому нет условий расы. Примером для такого состояния гонки будет следующее: Первый поток считывает значение из списка, вторые потоки перезаписывают значение, и первая тема перезаписывает значение снова недействительным в операции второго потока.
Все операции Cpython являются потоковыми безопасными. Но если вы объединяете эти операции на функции более высокого уровня, это не в целом без резьбы, поскольку они состоят из многих (возможно, чередующихся) операций.
Заключение
В этом посте вы узнали, как использовать list comprehension в Python для выполнения сложных задач без чрезмерного усложнения кода.
Теперь вы можете:
- Упростите циклы и вызовы map() с помощью использования декларативный представлений
- Использовать условную логику в представление
- Создать set и dictionary представления
- Определить, когда ясность кода или производительность диктует альтернативный подход
Всякий раз, когда вам нужно выбрать метод создания списка, попробуйте несколько реализаций и подумайте, что легче всего прочитать и понять в вашем конкретном сценарии. Если важна производительность, то вы можете использовать инструменты профилирования, чтобы предоставить вам реальные данные вместо того, чтобы полагаться на догадки или догадки о том, что работает лучше всего.
Помните, что хотя list comprehensions привлекает к себе большое внимание, ваша интуиция и способность использовать расчетные данные, помогут вам написать чистый код, который выполняет поставленную задачу. Это, в конечном счете, ключ к созданию вашего кода Pythonic!