Генераторы списков
В языке программирования 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]
Таким образом, генераторы позволяют создавать списки легче и быстрее. Однако заменить ими достаточно сложные конструкции не получится.
Как заполнить список?
все читаю-читаю статьи и понять никак не могу, как написать их..
1. Заполнить список двадцатью символами «#».
2. Заполнить список из n элементов случайными целыми числами из интервала от
а до b.
3. Заполнить список степенями числа 2 (от 21 до 2n).
4. Заполнить список двадцатью пятью первыми натуральными числами (1, 2, …, 25),
после чего добавить в него числа 100 и 200.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Code Style: Подскажите, как красиво заполнить список
здравствуйте подскажите как красиво заполнить список ArrayAdress = можно это как то.
Создать список из десяти элементов. Заполнить его случайными числами из промежутка от 20 до -50. Вывести этот список
Создать список из десяти элементов.Заполнить его случайными числами из промежутка от 20 до -50.
Как заполнить список случайными целыми числами и вывести из него во второй список нечетные числа
Вообщем нужно создать 2 кнопки: 1)Заполняет список случайными целыми числами. 2)выводит во второй.
Как заполнить двумерный список?
Дан текст: DEARDADPLEASESENDMONEYASSOONASPOSSIBLETOM Есть список списков: List<List<char>> sb =.
1007 / 351 / 59
Регистрация: 28.02.2013
Сообщений: 931
Сообщение от tomino
1. Заполнить список двадцатью символами «#».
a = ["#" for i in range(0,20)]
Добавлено через 1 минуту
Я вот все никак не пойму, зачем спрашивать то что гуглится за 1 минуту.
702 / 348 / 104
Регистрация: 09.02.2018
Сообщений: 789
a = ['#'] * 20
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как заполнить связный список?
Доброго времени суток, уважаемые форумчане) Начал изучать С++, дошёл до связных списков и вот.
Как заполнить список из Qpair
Как заполнить вот такой список const QList< QPair< QColor,float> > MyListColor; пытаюсь.
Как заполнить такой список?
type point=^st; bib=record f:string; g:string; org:string; end; st=record .
Двусвязный список( как заполнить с файла?)
В текстовом файле содержится последовательность вещественных чисел x1, x2, x3, … xn, где n заранее.
Как отобразить и заполнить список выбора в 8.3
Добрый день. Есть на форме у меня таблица. Две колонки. Одна колонка число, вторая строка. В.
Как правильно инициализировать и заполнить список
Сам понимаю что где интенсивно уж 3- час торможу. Вопрос по ArrayList Мне надо создать список моих.
Как заполнить список длиной N числами от 1 до N?
Как можно сделать, что бы список заполнялся от 1 до N числа. К примеру, я ввожу число 10, и нужно, чтобы ответ вывелся так 1 2 3 4 5 6 7 8 9 10.
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 9 окт 2018 в 10:44
MISHAEL OVECHKIN MISHAEL OVECHKIN
23 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Для формирования списка нужного размера можно использовать функцию range
N = int(input("Введите размер списка: ")) spam = list(range(1, N+1)) print(spam) > Введите размер списка: 10 > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Отслеживать
ответ дан 9 окт 2018 в 10:49
Alexshev92 Alexshev92
3,125 6 6 золотых знаков 18 18 серебряных знаков 33 33 бронзовых знака
9 окт 2018 в 10:58
В python-2.x достаточно следующего кода:
N = 3 print range(1, N + 1) # [1, 2, 3]
N = 3 print " ".join(map(str, range(1, N + 1))) # 1 2 3
В python-3.x схема работы range изменена, напрямую возвращает класс, поэтому чтобы вывести список принудительно проводим через list :
print(list(range(1, N+1))) # [1, 2, 3] print(" ".join(map(str, range(1, N+1)))) # 1 2 3
Списки (list). Функции и методы списков
Сегодня я расскажу о таком типе данных, как списки, операциях над ними и методах, о генераторах списков и о применении списков.
Что такое списки?
Списки в Python — упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться).
Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Например, можно обработать любой итерируемый объект (например, строку) встроенной функцией list:
Список можно создать и при помощи литерала:
Как видно из примера, список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего.
И еще один способ создать список — это генераторы списков. Генератор списков — способ построить новый список, применяя выражение к каждому элементу последовательности. Генераторы списков очень похожи на цикл for.
Возможна и более сложная конструкция генератора списков:
Но в сложных случаях лучше пользоваться обычным циклом for для генерации списков.
Функции и методы списков
Создать создали, теперь нужно со списком что-то делать. Для списков доступны основные встроенные функции, а также методы списков.
Таблица «методы списков»
Метод | Что делает |
---|---|
list.append(x) | Добавляет элемент в конец списка |
list.extend(L) | Расширяет список list, добавляя в конец все элементы списка L |
list.insert(i, x) | Вставляет на i-ый элемент значение x |
list.remove(x) | Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует |
list.pop([i]) | Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент |
list.index(x, [start [, end]]) | Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end) |
list.count(x) | Возвращает количество элементов со значением x |
list.sort([key=функция]) | Сортирует список на основе функции |
list.reverse() | Разворачивает список |
list.copy() | Поверхностная копия списка |
list.clear() | Очищает список |
Нужно отметить, что методы списков, в отличие от строковых методов, изменяют сам список, а потому результат выполнения не нужно записывать в эту переменную.
И, напоследок, примеры работы со списками:
Изредка, для увеличения производительности, списки заменяют гораздо менее гибкими массивами (хотя в таких случаях обычно используют сторонние библиотеки, например NumPy).
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте