Инициализировать список списков в Python
В этом посте мы обсудим, как инициализировать список списков в Python.
Чтобы создать список списков, никогда не используйте [[]] * N . Это приведет к повторению списка, содержащего один и тот же объект списка. N раз и вызвать ошибки ссылок. В этом посте представлен обзор некоторых доступных альтернатив для правильного создания списка списков.
1. Использование спискового понимания
Наиболее Pythonic-решение для создания пустого списка списков — использовать генераторы списков. Это можно сделать как:
Python создать список списков из обычного списка
Он не фиксированный, то есть значений может быть больше, а может и меньше, но количество элементов всегда кратно 4. И как мне из этого списка создать вот такой список списков:
list = [ [73,54] [73,94] [-73,-7] [-73,47] ]
Отслеживать
19.5k 5 5 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
задан 17 дек 2020 в 17:22
19 4 4 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
my_list = [73, 54, 73, 94, -73, -7, -73, 47] results = [list(couple) for couple in zip(my_list[::2], l[1::2])] print(results)
Отслеживать
ответ дан 17 дек 2020 в 17:36
2,050 4 4 золотых знака 15 15 серебряных знаков 23 23 бронзовых знака
главное чтоб кратно 2 было
просто пройдите через один элемент и выберите пары
arr = [73, 54, 73, 94, -73, -7, -73, 47] res = [[arr[i], arr[i + 1]] for i in range(0, len(arr), 2)] print(res)
res = [arr[i:i + 2] for i in range(0, len(arr), 2)]
res = list(zip(arr[::2], arr[1::2]))
Отслеживать
ответ дан 17 дек 2020 в 17:30
37.1k 4 4 золотых знака 26 26 серебряных знаков 69 69 бронзовых знаков
- python
- python-3.x
- list
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Списки в Python: методы и основные операции
Рассмотрим создание списков в Python и разберём основные методы. Научимся изменять, сортировать и совершать другие операции над list.
Списки в Python представляют собой упорядоченные изменяемые наборы объектов, пронумерованных от 0. При этом объекты могут быть разными — от целых чисел до строк. Списки могут также хранить в себе списки.
В статье разберёмся с базовыми принципами списков в Питоне, а также рассмотрим методы работы с ними. Если вы изучаете Python с нуля, предлагаем также ознакомиться с дорожной картой для начинающих.
- Хранение в памяти
- Создание списка
- Срезы (slice)
- Простые операции
- Методы списков
Хранение в памяти
При создании списка, в памяти резервируется пустая область. С одной стороны, это ничем не отличается от создания любого другого типа данных, но разница в том, что содержимое list может меняться:
numbers = [1, 2] numbers[1] = 3 # обновлённый список: [1, 3]
До замены элемента последовательности print(numbers[1]) выведет 2, а после замены — 3.
Создание списка в Python
Это можно сделать несколькими способами, например перечислением элементов списка в квадратных скобках:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
При этом единица будет на позиции 0, то есть print(numbers[0]) выведет 1.
Также можно использовать обработку итерируемого объекта функцией list() . Пусть у нас будет некоторая строка, тогда:
list('tproger') # ['t', 'p', 'r', 'o', 'g', 'e', 'r']
Также существуют генераторы списков, которые позволяют применить заданное выражение к каждому элементу последовательности. Допустим, необходимо создать list, состоящий из чисел от 1 до 5 включительно:
numbers = [i for i in range(1,6)] # [1, 2, 3, 4, 5]
Срезы (slice) списка
Срезы позволяют получить некое подмножество значений. Следующий код вернёт список с элементами, начиная индексом 0 и не включая при этом индекс 2 и выше:
numbers = [1, 5, 9, 6] print(numbers[0:2]) # вывод [1, 5]
Далее выведем всё, за исключением элемента на позиции 3:
print(numbers[:3]) # вывод [1, 5, 9]
А теперь начиная с индекса 1 и до конца:
print(numbers[1:]) # вывод [5, 9, 6]
Операции над списками Python
- x in l — true , если элемент x есть в списке l ;
- x not in l — true , если элемент x отсутствует в l ;
- l1 + l2 — объединение двух списков;
- l * n , n * l — копирует список n раз;
- len(l) — количество элементов в l ;
- min(l) — наименьший элемент;
- max(l) — наибольший элемент;
- sum(l) — сумма чисел списка;
- for i in list() — перебирает элементы слева направо.
Методы списков Python
Index
Возвращает положение первого совпавшего элемента. Поиск совпадения происходит слева направо. Пример:
numbers = [1, 5, 9, 6, 1, 2, 1] print(numbers.index(1)) # вывод 0: первая найденная единица на позиции 0
Count
Данный метод считает, сколько раз указанное значение появляется в списке Python:
numbers = [1, 5, 9, 6, 1, 2, 1] print(numbers.count(1)) # вывод 3, потому что единица встречается 3 раза
Append
Добавляет указанное значение в конец:
numbers = [1, 5, 9, 6] numbers.append(3) # обновлённый список: [1, 5, 9, 6, 3]
Sort
Сортирует список в Пайтоне. По умолчанию от меньшего к большему:
numbers = [1, 5, 9, 6] numbers.sort() # обновлённый список: [1, 5, 6, 9]
Также можно сортировать последовательность элементов от большего к меньшему:
numbers = [1, 5, 9, 6] numbers.sort(reverse = true) # обновлённый список: [9, 6, 5, 1]
Insert
Вставляет элемент перед указанным индексом:
numbers = [1, 5, 9, 6] numbers.insert(3, [2, 3]) # обновлённый список: [1, 5, 9, [2, 3], 6]
Remove
Удаляет первое попавшееся вхождение элемента в списке Python:
numbers = [1, 5, 9, 6, 1, 2, 1] numbers.remove(1) # обновлённый список: [5, 9, 6, 1, 2, 1]
Extend
Подобно методу append() , добавляет элементы, но преимущество метода extend() в том, что он также позволяет добавлять списки:
numbers = [1, 5, 9, 6] numbers.extend([2, 3]) # обновлённый список: [1, 5, 9, 6, 2, 3]
Pop
А данный метод удаляет элемент в конкретно указанном индексе, а также выводит удалённый элемент. Если индекс не указан, метод по умолчанию удалит последний элемент:
numbers = [1, 5, 9, 6] numbers.pop(1) # получаем: # 5 # [1, 9, 6]
Join
Преобразовывает список в строку. Разделитель элементов пишут в кавычках перед методом, а сам список Питона должен состоять из строк:
mylist = ['сайт', 'типичный', 'программист'] print(', '.join(mylist)) # вывод 'сайт, типичный, программист'
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Генераторы списков
В языке программирования Python существует специальная синтаксическая конструкция, которая позволяет по определенным правилам создавать заполненные списки. Такие конструкции называются генераторами списков. Их удобство заключается в более короткой записи программного кода, чем если бы создавался список обычным способом.
Например, надо создать список, заполненный натуральными числами до определенного числа. «Классический» способ будет выглядеть примерно так:
>>> a = [] >>> for i in range(1,15): . a.append(i) . >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
На создание списка ушло три строчки кода. Генератор же сделает это за одну:
>>> a = [i for i in range(1,15)] >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Здесь конструкция [i for i in range(1,15)] является генератором списка. Вся конструкция заключается в квадратные скобки, что как бы говорит, что будет создан список. Внутри квадратных скобок можно выделить три части: 1) что делаем с элементом (в данном случае ничего не делаем, просто добавляем в список), 2) что берем (в данном случае элемент i ), 3) откуда берем (здесь из объекта range). Части отделены друг от друга ключевыми словами for и in .
Рассмотрим такой пример:
>>> a = [2,-2,4,-4,7,5] >>> b = [i**2 for i in a] >>> b [4, 4, 16, 16, 49, 25]
В данном случае в генераторе списка берется каждый элемент из списка a и возводится в квадрат. Таким образом, 1) что делаем — возводим элемент в квадрат, 2) что берем — элемент, 3) откуда берем — из списка a .
>>> a = >>> b = [i*a[i] for i in a] >>> b [10, 40, 90]
Здесь берется ключ из словаря, а в генерируемый список добавляется произведение ключа на его значение.
>>> a = >>> b = [[i,a[i]] for i in a] >>> b [[1, 10], [2, 20], [3, 30]] >>> c = [j for i in b for j in i] >>> c [1, 10, 2, 20, 3, 30]
В этом примере генерируемый список b состоит из вложенных списков. Если бы в генераторе были опущены квадратные скобки в выражении [i,a[i]] , то произошла бы ошибка. Если все же надо получить одноуровневый список из ключей и значений словаря, надо взять каждый вложенный список и из него взять каждый элемент. Это достигается за счет вложенной конструкции for , что демонстрируется в строчке c = [j for i in b for j in i] . «Классический» синтаксис для заполнения списка c выглядел бы так:
>>> c = [] >>> for i in b: . for j in i: . c.append(j) . >>> c [1, 10, 2, 20, 3, 30]
В конец генератора можно добавлять конструкцию if . Например, надо из строки извлечь все цифры:
>>> a = "lsj94ksd231 9" >>> b = [int(i) for i in a if '0'>> b [9, 4, 2, 3, 1, 9]
Или заполнить список числами, кратными 30 или 31:
>>> a = [i for i in range(30,250) . if i%30 == 0 or i%31 == 0] >>> a [30, 31, 60, 62, 90, 93, 120, 124, 150, 155, 180, 186, 210, 217, 240, 248]
Таким образом, генераторы позволяют создавать списки легче и быстрее. Однако заменить ими достаточно сложные конструкции не получится.