Как сделать перебор списка в питоне
Обновлено: 04.07.2024
Список - это непрерывная динамическая коллекция элементов. Каждому элементу списка присваивается порядковый номер - его индекс. Первый индекс равен нулю, второй - единице и так далее. Основные операции для работы со списками - это индексирование, срезы, добавление и удаление элементов, а также проверка на наличие элемента в последовательности.
Создание пустого списка выглядит так:
Создадим список, состоящий из нескольких чисел:
numbers = [ 40 , 20 , 90 , 11 , 5 ]
Настало время строковых переменных:
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
Не будем забывать и о дробях:
fractions = [ 3.14 , 2.72 , 1.41 , 1.73 , 17.9 ]
Мы можем создать список, состоящий из различных типов данных:
values = [ 3.14 , 10 , 'Hello world!' , False, 'Python is the best' ]
И такое возможно (⊙_⊙)
list_of_lists = [[ 2 , 4 , 0 ], [ 11 , 2 , 10 ], [ 0 , 19 , 27 ]]
Индексирование
Что же такое индексирование? Это загадочное слово обозначает операцию обращения к элементу по его порядковому номеру ( ( ・ω・)ア напоминаю, что нумерация начинается с нуля). Проиллюстрируем это на примере:
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
print (fruits[ 0 ])
print (fruits[ 1 ])
print (fruits[ 4 ])
Списки в Python являются изменяемым типом данных. Мы можем изменять содержимое каждой из ячеек:
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
fruits[ 0 ] = 'Watermelon'
fruits[ 3 ] = 'Lemon'
print (fruits)
>>> [ 'Watermelon' , 'Grape' , 'Peach' , 'Lemon' , 'Orange' ]
Индексирование работает и в обратную сторону. Как такое возможно? Всё просто, мы обращаемся к элементу списка по отрицательному индексу. Индекс с номером -1 дает нам доступ к последнему элементу, -2 к предпоследнему и так далее.
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
print (fruits[ -1 ])
print (fruits[ -2 ])
print (fruits[ -3 ])
print (fruits[ -4 ])
Создание списка с помощью list()
Переходим к способам создания списка. Самый простой из них был приведен выше. Еще раз для закрепления:
А есть еще способы? Да, есть. Один из них — создание списка с помощью функции list() В неё мы можем передать любой итерируемый объект (да-да, тот самый по которому можно запустить цикл (• ᵕ •) )
Рассмотрим несколько примеров:
letters = list ( 'abcdef' )
numbers = list ( range ( 10 ))
even_numbers = list ( range ( 0 , 10 , 2 ))
print (letters)
print (numbers)
print (even_numbers)
>>> [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f'
>>> [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
>>> [ 0 , 2 , 4 , 6 , 8 ]
Длина списка
С созданием списка вроде разобрались. Следующий вопрос: как узнать длину списка? Можно, конечно, просто посчитать количество элементов. (⊙_⊙) Но есть способ получше! Функция len() возвращает длину любой итерируемой переменной, переменной, по которой можно запустить цикл. Рассмотрим пример:
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
print ( len (fruits))
numbers = [ 40 , 20 , 90 ]
print ( len (numbers))
". любой итерируемой", а это значит:
print ( len ( range ( 10 ))
Срезы
В начале статьи что-то говорилось о "срезах". Давайте разберем подробнее, что это такое. Срезом называется некоторая подпоследовательность. Принцип действия срезов очень прост: мы "отрезаем" кусок от исходной последовательности элемента, не меняя её при этом. Я сказал "последовательность", а не "список", потому что срезы работают и с другими итерируемыми типами данных, например, со строками.
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
part_of_fruits = fruits[ 0 :3]
print (part_of_fruits)
>>> [ 'Apple' , 'Grape' , 'Peach' ]
Детально рассмотрим синтаксис срезов:
итерируемая_переменная[начальный_индекс:конечный_индекс - 1 :длина_шага]
>>> [ 'Apple' ]
>>> [ 'Apple' , 'Grape' ]
>>> [ 'Apple' , 'Grape' , 'Peach' ]
>>> [ 'Apple' , 'Grape' , 'Peach' , 'Banan' ]
>>> [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
>>> [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
>>> [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
Самое время понять, что делает третий параметр среза - длина шага!
>>> [ 'Apple' , 'Peach' , 'Orange' ]
>>> [ 'Apple' , 'Banan' ]
>>> [ 'Orange' , 'Banan' , 'Peach' , 'Grape' , 'Apple' ]
>>> [ 'Orange' , 'Banan' ]
>>> [ 'Banan' , 'Peach' ]
А теперь вспоминаем всё, что мы знаем о циклах. В Python их целых два! Цикл for и цикл while Нас интересует цикл for, с его помощью мы можем перебирать значения и индексы наших последовательностей. Начнем с перебора значений:
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
f or fruit in fruits:
print (fruit, end = ' ' )
>>> Apple Grape Peach Banan Orange
Выглядит несложно, правда? В переменную fruit объявленную в цикле по очереди записываются значения всех элементов списка fruits
А что там с перебором индексов?
f or index in range ( len (fruits)):
print (fruits[index], end = ' ' )
Этот пример гораздо интереснее предыдущего! Что же здесь происходит? Для начала разберемся, что делает функция range(len(fruits))
Мы с вами знаем, что функция len() возвращает длину списка, а range() генерирует диапазон целых чисел от 0 до len()-1.
Сложив 2+2, мы получим, что переменная index принимает значения в диапазоне от 0 до len()-1. Идем дальше, fruits[index] - это обращение по индексу к элементу с индексом index списка fruits. А так как переменная index принимает значения всех индексов списка fruits, то в цикле мы переберем значения всех элементов нашего списка!
Операция in
С помощью in мы можем проверить наличие элемента в списке, строке и любой другой итерируемой переменной.
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
if 'Apple' in fruits:
print ( 'В списке есть элемент Apple' )
>>> В списке есть элемент Apple
fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
if 'Lemon' in fruits:
print ( 'В списке есть элемент Lemon' )
else :'
print ( 'В списке НЕТ элемента Lemon' )
>>> В списке НЕТ элемента Lemon
Приведу более сложный пример:
all_fruits = [ 'Apple' , 'Grape' , 'Peach' , 'Banan' , 'Orange' ]
my_favorite_fruits = [ 'Apple' , 'Banan' , 'Orange' ]
f or item in all_fruits:
if item in my_favorite_fruits:
print (item + ' is my favorite fruit' )
else :
print ( 'I do not like ' + item)
>>> Apple is my favorite fruit
>>> I do not like Grape
>>> I do not like Peach
>>> Banan is my favorite fruit
>>> Orange is my favorite fruit
Методы для работы со списками
Начнем с метода append(), который добавляет элемент в конец списка:
>>> [ 0 , 2 , 4 , 6 , 8 , 200 , 1 , 2 , 3 ]
Мы можем передавать методу append() абсолютно любые значения:
all_types = [ 10 , 3.14 , 'Python' , [ 'I' , 'am' , 'list' ]]
all_types. append ( 1024 )
all_types. append ( 'Hello world!' )
all_types. append ([ 1 , 2 , 3 ])
print (all_types)
>>> [ 10 , 3.14 , 'Python' , [ 'I' , 'am' , 'list' ], 1024 , 'Hello world!' , [ 1 , 2 , 3 ]]
Метод append() отлично выполняет свою функцию. Но, что делать, если нам нужно добавить элемент в середину списка? Это умеет метод insert(). Он добавляет элемент в список на произвольную позицию. insert() принимает в качестве первого аргумента позицию, на которую нужно вставить элемент, а вторым — сам элемент.
Отлично! Добавлять элементы в список мы научились, осталось понять, как их из него удалять. Метод pop() удаляет элемент из списка по его индексу:
Теперь мы знаем, как удалять элемент из списка по его индексу. Но что, если мы не знаем индекса элемента, но знаем его значение? Для такого случая у нас есть метод remove(), который удаляет первый найденный по значению элемент в списке.
А сейчас немного посчитаем, посчитаем элементы списка с помощью метода count()
В программировании, как и в жизни, проще работать с упорядоченными данными, в них легче ориентироваться и что-либо искать. Метод sort() сортирует список по возрастанию значений его элементов.
Мы можем изменять порядок сортировки с помощью параметра reverse. По умолчанию этот параметр равен False
Иногда нам нужно перевернуть список, не спрашивайте меня зачем. Для этого в самом лучшем языке программирования на этой планете JavaScr..Python есть метод reverse():
Допустим, у нас есть два списка и нам нужно их объединить. Программисты на C++ cразу же кинулись писать циклы for, но мы пишем на python, а в python у списков есть полезный метод extend(). Этот метод вызывается для одного списка, а в качестве аргумента ему передается другой список, extend() записывает в конец первого из них начало второго:
fruits = [ 'Banana' , 'Apple' , 'Grape' ]
vegetables = [ 'Tomato' , 'Cucumber' , 'Potato' , 'Carrot' ]
fruits. extend (vegetables)
print (fruits)
>>> [ 'Banana' , 'Apple' , 'Grape' , 'Tomato' , 'Cucumber' , 'Potato' , 'Carrot' ]
В природе существует специальный метод для очистки списка — clear()
fruits = [ 'Banana' , 'Apple' , 'Grape' ]
vegetables = [ 'Tomato' , 'Cucumber' , 'Potato' , 'Carrot' ]
fruits. clear ()
vegetables. clear ()
print (fruits)
print (vegetables)
Осталось совсем чуть-чуть всего лишь пара методов, так что делаем последний рывок! Метод index() возвращает индекс элемента. Работает это так: вы передаете в качестве аргумента в index() значение элемента, а метод возвращает его индекс:
fruits = [ 'Banana' , 'Apple' , 'Grape' ]
print (fruits. index ( 'Apple' ))
print (fruits. index ( 'Banana' ))
print (fruits. index ( 'Grape' ))
Финишная прямая! Метод copy(), только не падайте, копирует список и возвращает его брата-близнеца. Вообще, копирование списков - это тема достаточно интересная, давайте рассмотрим её по-подробнее.
Во-первых, если мы просто присвоим уже существующий список новой переменной, то на первый взгляд всё выглядит неплохо:
fruits = [ 'Banana' , 'Apple' , 'Grape' ]
new_fruits = fruits
print (fruits)
print (new_fruits)
>>> [ 'Banana' , 'Apple' , 'Grape' ]
>>> [ 'Banana' , 'Apple' , 'Grape' ]
Но есть одно маленькое "НО":
fruits = [ 'Banana' , 'Apple' , 'Grape' ]
new_fruits = fruits
fruits. pop ()
print (fruits)
print (new_fruits)
При прямом присваивании списков копирования не происходит. Обе переменные начинают ссылаться на один и тот же список! То есть если мы изменим один из них, то изменится и другой. Что же тогда делать? Пользоваться методом copy(), конечно:
fruits = [ 'Banana' , 'Apple' , 'Grape' ]
new_fruits = fruits. copy ()
fruits. pop ()
print (fruits)
print (new_fruits)
>>> [ 'Banana' , 'Apple' ]
>>> [ 'Banana' , 'Apple' , 'Grape' ]
Отлично! Но что если у нас список в списке? Скопируется ли внутренний список с помощью метода copy() — нет:
Решение задач
1. Создайте список из 10 четных чисел и выведите его с помощью цикла for
2. Создайте список из 5 элементов. Сделайте срез от второго индекса до четвертого
3. Создайте пустой список и добавьте в него 10 случайных чисел и выведите их. В данной задаче нужно использовать функцию randint.
4. Удалите все элементы из списка, созданного в задании 3
5. Создайте список из введенной пользователем строки и удалите из него символы 'a', 'e', 'o'
6. Даны два списка, удалите все элементы первого списка из второго
7. Создайте список из случайных чисел и найдите наибольший элемент в нем.
8. Найдите наименьший элемент в списке из задания 7
9. Найдите сумму элементов списка из задания 7
10. Найдите среднее арифметическое элементов списка из задания 7
Сложные задачи
1. Создайте список из случайных чисел. Найдите номер его последнего локального максимума (локальный максимум — это элемент, который больше любого из своих соседей).
2. Создайте список из случайных чисел. Найдите максимальное количество его одинаковых элементов.
3. Создайте список из случайных чисел. Найдите второй максимум.
4. Создайте список из случайных чисел. Найдите количество различных элементов в нем.
Списки в Python представляют собой упорядоченные изменяемые наборы объектов, пронумерованных от 0. При этом объекты могут быть разными — от целых чисел до строк. Списки могут также хранить в себе списки.
В статье разберёмся с базовыми принципами списков в Питоне, а также рассмотрим методы работы с ними. Если вы изучаете Python с нуля, предлагаем также ознакомиться с дорожной картой для начинающих.
Хранение в памяти
При создании списка, в памяти резервируется пустая область. С одной стороны, это ничем не отличается от создания любого другого типа данных, но разница в том, что содержимое list может меняться:
До замены элемента последовательности print(numbers[1]) выведет 2, а после замены — 3.
Создание списка в Python
Это можно сделать несколькими способами, например перечислением элементов списка в квадратных скобках:
При этом единица будет на позиции 0, то есть print(numbers[0]) выведет 1.
Также можно использовать обработку итерируемого объекта функцией list() . Пусть у нас будет некоторая строка, тогда:
Также существуют генераторы списков, которые позволяют применить заданное выражение к каждому элементу последовательности. Допустим, необходимо создать list, состоящий из чисел от 1 до 5 включительно:
Срезы (slice) списка
Срезы позволяют получить некое подмножество значений. Следующий код вернёт список с элементами, начиная индексом 0 и не включая при этом индекс 2 и выше:
Далее выведем всё, за исключением элемента на позиции 3:
А теперь начиная с индекса 1 и до конца:
Операции над списками 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
Возвращает положение первого совпавшего элемента. Поиск совпадения происходит слева направо. Пример:
Count
Данный метод считает, сколько раз указанное значение появляется в списке Python:
Append
Добавляет указанное значение в конец:
Сортирует список в Пайтоне. По умолчанию от меньшего к большему:
Также можно сортировать последовательность элементов от большего к меньшему:
Insert
Вставляет элемент перед указанным индексом:
Remove
Удаляет первое попавшееся вхождение элемента в списке Python:
Extend
Подобно методу append() , добавляет элементы, но преимущество метода extend() в том, что он также позволяет добавлять списки:
А данный метод удаляет элемент в конкретно указанном индексе, а также выводит удалённый элемент. Если индекс не указан, метод по умолчанию удалит последний элемент:
Преобразовывает список в строку. Разделитель элементов пишут в кавычках перед методом, а сам список Питона должен состоять из строк:
Не путайте в Python списки и массивы: в первых можно хранить разнородные объекты. Здесь кратко описаны все основные методы списков Python 3.x.
Когда речь идет о массивах, обычно мы подразумеваем набор однородных элементов. Но в Python списки – это не массивы. Список (list) может представлять коллекцию разнородных объектов: целые и дробные числа, строки, логические значения и т. д. Описанное свойство позволяет разработчикам применять списки более гибко, чем обычные массивы. Среди типов данных Python списки являются одним из наиболее мощных и часто используемых.
В Python списки создаются двумя способами:
Элементы списка можно сразу поместить внутрь скобок. По умолчанию создается пустой list.
Итак, мы создали два пустых списка. Заполним их данными.
В языке программирования Python это изменяемые объекты. Можно добавлять, заменять или удалять конкретные элементы, не следя за остальными. Добавить элементы в список можно двумя методами:
Добавление элемента методом append()
append() добавляет в конец списка элемент, переданный в качестве аргумента:
Добавление элемента методом insert()
insert() принимает два аргумента – индекс позиции и вставляемый элемент:
Есть три способа:
- Оператор индекса
- Оператор среза
- Итерирование
Оператор индекса
Индекс используется для доступа к отдельному элементу.
Оператор среза
Срез применяется для обращения к нескольким элементам списка. Синтаксис: list_name[start:stop:step], где
- start – индекс, с которого начинается срез (по умолчанию начало списка)
- stop – индекс, до которого осуществляется срез (по умолчанию конец списка)
- step – шаг приращения, по умолчанию равно 1
Обратите внимание: если указан индекс stop, то срез осуществляется вплоть до него, но исключая сам элемент.
Итерирование
Списки Python – итерируемые объекты. Для перебора элементов списка не нужен счетчик:
Всего два метода:
Удаление элемента методом remove()
remove() находит и удаляет элемент из списка:
Удаление элемента методом pop()
pop() удаляет и возвращает элемент, по умолчанию последний:
Посмотреть аттрибуты и функции объекта списка, как и других объектов Python, можно передав список функции dir(). Вот сокращенный вид выводимого функцией списка:
Одна из ключевых особенностей Python, благодаря которой он является таким популярным – это простота. Особенно подкупает простота работы с различными структурами данных – списками, кортежами, словарями и множествами. Сегодня мы рассмотрим работу со списками.
Что такое список (list) в Python?
Список (list) – это структура данных для хранения объектов различных типов. Если вы использовали другие языки программирования, то вам должно быть знакомо понятие массива. Так вот, список очень похож на массив, только, как было уже сказано выше, в нем можно хранить объекты различных типов. Размер списка не статичен, его можно изменять. Список по своей природе является изменяемым типом данных. Про типы данных можно подробно прочитать здесь . Переменная, определяемая как список, содержит ссылку на структуру в памяти, которая в свою очередь хранит ссылки на какие-либо другие объекты или структуры.
Как списки хранятся в памяти?
Как уже было сказано выше, список является изменяемым типом данных. При его создании в памяти резервируется область, которую можно условно назвать некоторым “контейнером”, в котором хранятся ссылки на другие элементы данных в памяти. В отличии от таких типов данных как число или строка, содержимое “контейнера” списка можно менять. Для того, чтобы лучше визуально представлять себе этот процесс взгляните на картинку ниже. Изначально был создан список содержащий ссылки на объекты 1 и 2, после операции a[1] = 3, вторая ссылка в списке стала указывать на объект 3.
Более подробно эти вопросы обсуждались в уроке 3 (Типы и модель данных).
Создание, изменение, удаление списков и работа с его элементами
Создать список можно одним из следующих способов.
Также можно создать список с заранее заданным набором данных.
Если у вас уже есть список и вы хотите создать его копию, то можно воспользоваться следующим способом:
или сделать это так:
В случае, если вы выполните простое присвоение списков друг другу, то переменной b будет присвоена ссылка на тот же элемент данных в памяти, на который ссылается a, а не копия списка а. Т.е. если вы будете изменять список a, то и b тоже будет меняться.
Добавление элемента в список осуществляется с помощью метода append().
Для удаления элемента из списка, в случае, если вы знаете его значение, используйте метод remove(x), при этом будет удалена первая ссылка на данный элемент.
Если необходимо удалить элемент по его индексу, воспользуйтесь командой del имя_списка[индекс].
Изменить значение элемента списка, зная его индекс, можно напрямую к нему обратившись.
Очистить список можно просто заново его проинициализировав, так как будто вы его вновь создаете. Для получения доступа к элементу списка укажите индекс этого элемента в квадратных скобках.
Можно использовать отрицательные индексы, в таком случае счет будет идти с конца, например для доступа к последнему элементу списка можно использовать вот такую команду:
Для получения из списка некоторого подсписка в определенном диапазоне индексов, укажите начальный и конечный индекс в квадратных скобках, разделив их двоеточием.
Методы списков
list.append(x)
Добавляет элемент в конец списка. Ту же операцию можно сделать так a[len(a):] = [x].
list.extend(L)
Расширяет существующий список за счет добавления всех элементов из списка L. Эквивалентно команде a[len(a):] = L.
list.insert(i, x)
Вставить элемент x в позицию i. Первый аргумент – индекс элемента после которого будет вставлен элемент x.
list.remove(x)
Удаляет первое вхождение элемента x из списка.
Удаляет элемент из позиции i и возвращает его. Если использовать метод без аргумента, то будет удален последний элемент из списка.
list.clear()
Удаляет все элементы из списка. Эквивалентно del a[:].
list.index(x[, start[, end]])
Возвращает индекс элемента.
list.count(x)
Возвращает количество вхождений элемента x в список.
list.sort(key=None, reverse=False)
Сортирует элементы в списке по возрастанию. Для сортировки в обратном порядке используйте флаг reverse=True. Дополнительные возможности открывает параметр key, за более подробной информацией обратитесь к документации.
list.reverse()
Изменяет порядок расположения элементов в списке на обратный.
list.copy()
Возвращает копию списка. Эквивалентно a[:].
List Comprehensions
List Comprehensions чаще всего на русский язык переводят как абстракция списков или списковое включение, является частью синтаксиса языка, которая предоставляет простой способ построения списков. Проще всего работу list comprehensions показать на примере. Допустим вам необходимо создать список целых чисел от 0 до n, где n предварительно задается. Классический способ решения данной задачи выглядел бы так:
Использование list comprehensions позволяет сделать это значительно проще:
или вообще вот так, в случае если вам не нужно больше использовать n:
List Comprehensions как обработчик списков
В языке Python есть две очень мощные функции для работы с коллекциями: map и filter . Они позволяют использовать функциональный стиль программирования, не прибегая к помощи циклов, для работы с такими типами как list , tuple , set , dict и т.п. Списковое включение позволяет обойтись без этих функций. Приведем несколько примеров для того, чтобы понять о чем идет речь.
Пример с заменой функции map .
Пусть у нас есть список и нужно получить на базе него новый, который содержит элементы первого, возведенные в квадрат. Решим эту задачу с использованием циклов:
Та же задача, решенная с использованием map , будет выглядеть так:
В данном случае применена lambda -функция, о том, что это такое и как ее использовать можете прочитать здесь.
Через списковое включение эта задача будет решена так:
Пример с заменой функции filter .
Построим на базе существующего списка новый, состоящий только из четных чисел:
Решим эту задачу с использованием filter :
Решение через списковое включение:
Слайсы / Срезы
Слайсы (срезы) являются очень мощной составляющей Python , которая позволяет быстро и лаконично решать задачи выборки элементов из списка. Выше уже был пример использования слайсов, здесь разберем более подробно работу с ними. Создадим список для экспериментов:
Слайс задается тройкой чисел, разделенных запятой: start:stop:step . Start – позиция с которой нужно начать выборку, stop – конечная позиция, step – шаг. При этом необходимо помнить, что выборка не включает элемент определяемый stop .
Слайсы можно сконструировать заранее, а потом уже использовать по мере необходимости. Это возможно сделать, в виду того, что слайс – это объект класса slice . Ниже приведен пример, демонстрирующий эту функциональность:
Типо “List Comprehensions”… в генераторном режиме
Есть ещё одни способ создания списков, который похож на списковое включение, но результатом работы является не объект класса list , а генератор. Подробно про генераторы написано в “ Уроке 15. Итераторы и генераторы“.
Предварительно импортируем модуль sys , он нам понадобится:
Создадим список, используя списковое включение :
проверим тип переменной a:
и посмотрим сколько она занимает памяти в байтах:
Для создания объекта-генератора, используется синтаксис такой же как и для спискового включения, только вместо квадратных скобок используются круглые:
Обратите внимание, что тип этого объекта ‘generator’ , и в памяти он занимает места меньше, чем список, это объясняется тем, что в первом случае в памяти хранится весь набор чисел от 0 до 9, а во втором функция, которая будет нам генерировать числа от 0 до 9. Для наших примеров разница в размере не существенна, рассмотрим вариант с 10000 элементами:
Сейчас уже разница существенна, как вы уже поняли, размер генератора в данном случае не будет зависеть от количества чисел, которые он должен создать.
Если вы решаете задачу обхода списка, то принципиальной разницы между списком и генератором не будет:
Но с генератором нельзя работать также как и со списком: нельзя обратиться к элементу по индексу и т.п.
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Python. Урок 7. Работа со списками (list) : 48 комментариев
там ошибка
Изменить значение элемента списка, зная его индекс, можно напрямую к нему обратившись.
>>> d = [2, 4, 9]
>>> print(d)
[2, 4, 9]
>>> d[1] = 17 индекс указан первый, следовательно должен измениться первый элемент.
>>> print(d)
[2, 17, 9] а тут изменен второй элемент. Вывод должен выглядеть так [17, 4, 9] Если я не
ошибаюсь)))
В Python элементы списка нумеруются с нуля. Поэтому в списке [2, 4, 9], элемент с индексом 1 – это 4, и если мы сделаем присваивание d[1] = 17, то поменяем средний элемент в списке, так как это показано в примере!
Удачи!
ой спасибо за обьяснение)) изивиняюсь за ложные обвинения и невнимательность)))
Пожалуйста! Спасибо вам за интерес к блогу)))
Отщет начинается с нуля
Ошибаешься, индексы считаем с 0
Нумераци индексов списка идёт не с едины (1) а с нуля следовательно чтобы вам вместо двоики поставить число 17
d [0] = 17
print (d)
Это не только в Python так, это вообще в программировании. В любом языке, насколько я знаю.
Счёт в python начинается с 0 , следовательно [1]-это вторая позиция списка.
Подскажите,пожалуйста, как быстро (не используя перебор по индексно ) проверить равно ли произвольное значение одному из значений списка ?
Например у меня есть список d=[2,4,12,5]
Ввели а=4
Если значение а есть в списке, то вывести “+”. Если нет ,то “-“
Можно сделать так:
d = [2, 4, 12, 5]
a = 4
if a in d:
print(“YES”)
Только четыре пробела не забудьте перед print(“YES”) (в комментах не получается код нужным образом отформатировать)
ну, как бы, есть in, который вернет True, если такой элемент есть, и False иначе. И есть count, который вернет количество элементов, если есть такие. Зачем именно сравнивать?
Можно и не 4 пробела, а всего 1. А лучше всего табуляция.
Нее! Нужно именно четыре)) Но проблема уже решена!
можно 1 пробел, если в той же строке
Здравствуйте! А можете, пожалуйста, объяснить, как работает “for in” со списками. Я не понимаю. Я привык к языкам, где в основном доступ по индексу, сложно понять работу “for in”. Как работает цикл: по индексам от 0 до длины списка, или абы как достает элемент, т.е. необязательно по возрастанию индекса элемента? Мне бы хотелось знать индекс элемента, который я обрабатываю в цикле. Лучше завести отдельно переменную counter, которая будет считать или использовать list.index(value). Или во втором случае будет вызываться не атрибут элемента, а будет происходить именно поиск такого элемента, т.е. сложность будет линейная?
Добрый день!
Постараюсь в двух словах объяснить, for для списка работает следующим образом:
1. Берется итератор у списка. Итератор – это такой объект, который позволяет получать доступ к элементам списка (извлекать их). Взять итератор, это значит выполнить функцию iter(), аргумент которой – список (в данном случае).
2. На каждой итерации цикла извлекается элемент из списка (с помощью функции next())
3. Шаги 1 и 2 повторяются пока элементы в цикле не закончатся (итератор выбросит исключение StopIteration)
Обход элементов в цикле осуществляется в том порядке, в котором они в нем хранятся (не абы как!).
Для получения индекса элемента лучше использовать функцию enumerate, вот пример:
>>> a = ['a', 'b', 'c']
>>> for sym in enumerate(a):
print(str(sym[0]) + " -- " + str(sym[1]))
И, кстати, дополню, что более коротким (но, наверное, с первого раза – менее понятным) способом обработать список из примера выше можно единственным генератором:
F_List = [element+10 if element==4 else element for element in F_List]
Здравствуйте! Возможно ли с помощью команды pop удаление несколько элементов списка или промежуток? Если да напишите пожалуйста пример.
Что,то похожее с:
Добрый день!
Нет, с помощью pop нельзя удалить за раз несколько элементов списка. Его назначение – извлечение элемента (чаще всего последнего). А чем вас не устраивает del?
в примере для
>>list.insert(i, x)
написано так:
“Вставить элемент x в позицию i. Первый аргумент – индекс элемента после* которого будет вставлен элемент x.”
*хотя, по смыслу примера, вставка происходит прямо по индексу i, а не после. Элементы сдвигаются.
Для получения из списка некоторого подсписка в определенном диапазоне индексов, укажите начальный и конечный индекс в квадратных скобках, разделив их двоеточием.
Это же упоминается работа с подмножеством, элементов списка ‘a’. Подмножество списка в python называется срез (slice)
Почему у всех объектов один список?
lis = []
for i in range(4):
o = O()
o.k.append(i)
lis.append(o)
for i in lis:
print(i.k)
output:
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
А Вы не могли бы написать пример Вашей программы (т.к. сайт “обрезает отступы) с комментариями в виде:
Это не то что мне нужно
Здравствуйте! Изучаю пайтон и столкнулся с такой проблемкой. У меня есть много списков, которые состоят из текста в формате:
[list1]
[list2]
..
[list n]
Подскажите, пож, могу ли я все эти списки объединить в один список и как?
result = [list1] + [list2] + … + [list n]
Здравствуйте. Как в списке определить сколько раз встречается цифра? Отличный сайт.
Вопрос не очень понятен: уточните вид списка (он состоит из одиночных символов или из строк произвольной длины, или тип данных в списке не определен…), нужно определить частоту какой-то конкретной цифры или просто любой цифры от 0 до 9 и т.п.? Может, просто приведете условный пример списка?
Как вычислить четные числа в списке?
import array as arr
a = arr.array(‘i’)
for i in range(0,20):
if a[i]%2 == 0:
print(“Zhup sandar = “, a[i])
есть список
работа со списками:
sp = [23, 40, 60, 70, 60]
команда print(sp.index(60))
возвращает в списке индекс счисла “60”.
тоесть возвратит цифру “2”.
Вопрос.:Как возвратить индекс второго числа “60” в списке?
ест ьсписко
sp = [90, 90, 57, 23, 65, 46]
Задача: вывести индекс каждого числа:
Пишу
itr = iter(sp)
for i in sp:
print(sp.index(next(itr)))
В итоге выводится в столбик
0
0
2
3
4
5
Вопрос: почему нет цифры “1”?
По идее она должна быть и показывать индекс второго числа “90”
не понятно зачем в примере используется iter
2. sp.index метод возвращает не индекс текущего элемента, а индекс ПЕРВОГО НАЙДЕННОГО элемента в вашем случае 90 впервые встречается в списке под индексом 0
3. для получения индекса используйте метод enumerate
Например так…
for i, e in enumerate(sp): print(i,e)
Здраствуйте, а можете подсказать как изменить знак на всех элементах списка?
Здравствуйте, подскажите пожалуйста как я могу поменять элементы списка задом наперед не используя отрицательный срез и функцию reserve? Чтобы получись х=[10,9,8,7,6,5,4,3,2,1] вместо х=[1,2,3,4,5,6,7,8,9,10]
да, но имей в виду
1. у тебя в примере русская буква “х”, а не латинский икс 😉
2. вызвав х.reverse(), в переменной х сохранится развернутый список
Типо “List Comprehensions”… в генераторном режиме
Автору спасибо! Отличная статья.
Сам только изучаю Python но такого качества статей не много
Понравилось, что не просто обзор методов класса, а то что автор:
1. расширил их с помощью методов типа map и filter, здоро во еще было бы добавить несколько еще методов, например enumerate
2. всё сопровождается примерами, причём разными на разный уровень читателя 🙂
А еще молодцы те, кто в комментах задают вопросы, это почти как ДЗ для усвоения материала))
Добрый день! Изучаю Python, есть такое задание “Из приведённого выше списка списков выведите с помощью индексов число 7”. Ниже, собственно, список:
L = [[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]],
[[21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40]],
[[41, 42, 43, 44, 45], [46, [47, 48], 49, 50], [51, 52, 53, 54, 55], [56, 57, 58, 59, 60]],
[61, 62, 63, [64, 65, 66, 67, 68, 69, 70, 71], 72, 73, 74, [75, [76, 77, 78], 79], 80],
[81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]]
Решил я его криво-косо “print(L[0][0][6])”, но что-то мне подсказывает, что такое решение в корне не верно. Прошу подсказать, как осуществлять поиск значения в списке списков?
Добрый день. Подскажите, а как сделать, что данные вводим просто числа, а в результате должны получить список этих же чисел, но уже в одиночных кавычках
выборка и slice какие-то странные. a[0:4] Тут 0 это индекс элемента списка (начиная с 0), а 4 номер элемента по порядку (начиная с 1). Ну как-то одним способом индексировать было бы понятней и проще. Тоже самое с -slice(0,4,1)
Всем привет.
Начал изучать пайтон, не мгу решить проблему:
lis[1,2,3,[‘a’,’b’,’c’,55]]
вибрать елемент по его номеру через print(…)
програма видает такое:
TypeError: ‘int’ object is not subscriptable
Добрый день, подскажите пож. как найти самую длинную последовательность в списке через for и if
пример
a = [1,2,5,5,5,5,4,5]
Читайте также: