Списки - внутри являются массивами, просто называются списками, но это массива не списки как в других языках, скорость доступа к элементам по индексам происходит за константу и получение длинны списка за константу, также списки, как и строки можно конкатенировать при помощи символа плюса. Списки стараются использовать для хранения значений одинаковых типов.
Списки это последовательности, так что они имеют схожий способ доступа,
вывести список можно обычной функцией print()
.
my_list = ['one', 'two', 2, 3.14, 1.618]
print(my_list)
# ['one', 'two', 2, 3.14, 1.618]
Мы можем добавить новый элемент в список, двумя разными способами, к примеру так:
my_list = ['one', 'two', 2, 3.14, 1.618]
print(my_list)
my_list.append('new var')
print(my_list)
my_list = my_list + ['new var']
print(my_list)
# ['one', 'two', 2, 3.14, 1.618]
# ['one', 'two', 2, 3.14, 1.618, 'new var']
# ['one', 'two', 2, 3.14, 1.618, 'new var', 'new var']
Что такое строка ? Строка это тоже последовательность, и реализованная
в виде чего-то похожего на кортеж. При добавлении нового элемента не
методом .append()
а при помощи обычного оператора +
то есть разница
между добавление строки и списка в котором есть строка, если добавляем
список с одним элементом то все сработает как с методом .append()
но если мы просто добавляем строку, то вся строка будет разделена на
элементы и добавлена в качестве списка, вот как это выглядит:
my_list1 = ['one', 'two', 2, 3.14, 1.618]
my_list2 = my_list1[:]
my_list1 += 'new var'
my_list2 += ['new var']
my_list2.append('some one')
print(my_list1)
print(my_list2)
['one', 'two', 2, 3.14, 1.618, 'n', 'e', 'w', ' ', 'v', 'a', 'r']
['one', 'two', 2, 3.14, 1.618, 'new var', 'some one']
Копирование одного списка в другой, можно сделать просто указанием
скопировать все с 0
до последнего элемента, шагом 1
что эквивалентно
методу [:]
my_list1 = ['one', 'two', 2, 3.14, 1.618]
my_list2 = my_list1[:]
Обычно для того, чтобы пройтись по списку, нам требуется 2 возможных варианта, либо пройтись именно по элементам списка, либо пройтись циклом такое количество раз сколько элементов в списке у нас имеется с допуском к каждому элементу по его индексу.
- Пройтись именно по каждому элементу списка, можно просто использовав
цикл
for
на него, мы действительно будем работать с каждым элементом списка, но производить какие-то действия мы будем уже с копией этого элемента, и эти изменения не повлияют на оригиналы из самого списка.
my_list = ['один', 'два', 'три', 'четыре', 'пять']
print(my_list)
for elem in my_list:
elem += ' !'
print(elem)
print(my_list)
# ['один', 'два', 'три', 'четыре', 'пять']
#
# один !
# два !
# три !
# четыре !
# пять !
#
# ['один', 'два', 'три', 'четыре', 'пять']
- Второй способ, пройтись циклом столько сколько есть элементов в списке, с допуском к каждому элементу по его индексу, этот метод требует подсчета количества элементов в списке, и сам индекс цикла будет соответствовать индексу элементов в списке, благодаря чему и будет происходить доступ к элементам, этот метод позволяет изменять значения в исходном списке:
my_list = [1, 2, 3, 4, 5]
print(my_list)
for i in range(len(my_list)):
my_list[i] += 5
print(my_list[i])
# [1, 2, 3, 4, 5]
#
# 6
# 7
# 8
# 9
# 10
- Если просто требуется вывести все элементы списка, то можно
использовать функцию строки
join
по дефолту соединять можно только строки, так что если в списке есть не строковые элементы, то перед использованием, следует преобразовать их все к строке, что можно сделать при помощи специальной функцииmap
:
my_list = [1, 2, 3, 4, 5]
string_list = ['1', '2', '3', '4', '5']
print(' '.join(map(str, my_list)))
print(' '.join(string_list))
# 1 2 3 4 5
# 1 2 3 4 5
-
append()
- Добавляет элемент в конец списка -
pop()
- Удаляет последний элемент из списка, или элемент по переданному индексу, при этом удаленный элемент будет возвращен в переменную. -
reverse()
- Меняет порядок элементов списка на обратный -
sort()
- Сортирует в Алфавитный/По возрастанию порядке -
count(value)
- Возвращает количество раз сколько значение встречается в списке.
my_list = [1,2,3,4,5,6]
print(my_list.count(3))
# Вывод
# Сколько раз в списке встречается значение '3'
# 1
Когда мы хотим вывести все элементы списка, используя метод print
получаем вывод со скобками, также будет и при использовании метода
repr
для красивого вывода можно использовать метод строк join
Как помним join
это метода строк, который принимает в себя некую
последовательность, и выводит эту последовательность, элемент за
элементом, соединенные вместе при помощи той самой строки у которой
этот метод вызывается.
Так что для красивого вывода без скобок можно использовать метод строк join
К примеру так:
my_list = ['первый', 'второй', 'третий', 'четвертый']
print('Вывод списка методом print: ', my_list)
print('Вывод списка методом join: {list}'.format(list=' , '.join(my_list)))
# Вывод
# Вывод списка методом print: ['первый', 'второй', 'третий', 'четвертый']
# Вывод списка методом join: первый , второй , третий , четвертый
Когда есть список с которым мы хотим сделать ряд изменений, есть одна
тонкость, для добавления элемента в список используем метод .append()
если требуется добавить последовательность к концу списка, то используем
метод .extend(list)
Если мы соединяем список с другим списком при помощи сложения +
и
присвоим это другой переменной, то будет создано полностью новое
значение, присвоено другой переменной, и это уже 2 разных объекта.
my_list_1 = [1, 2, 3]
my_list_2 = my_list_1 + [1, 2, 3]
print(my_list_1, id(my_list_1))
print(my_list_2, id(my_list_2))
# Вывод
# [1, 2, 3] 140529396469256
# [1, 2, 3, 1, 2, 3] 140529396503304
Пример присвоения одного списка к другому, помощью метода extend()
:
my_list_1 = [1, 2, 3]
my_list_2 = [0, 0, 0]
my_list_2.extend(my_list_1)
print(my_list_1)
print(my_list_2)
# [1, 2, 3]
# [0, 0, 0, 1, 2, 3]
Списки являются изменяемым типом данных, так что 2 переменные являются
разными объектами, по этому сравнение оператором is
который сравнивает
по ссылке, вернет False
, да внутри самих списков объекты могут быть
одинаковыми, и ссылаться на одно и то же место в памяти, но сами списки
разные, и занимают разные места в памяти:
a = [1, 5]
b = [1, 5]
print(a is b)
# Вывод
# False
Проверка по значению ==
то есть проверяет являться ли объекты внутри
списков одинаковыми:
a = [1, 5]
b = [1, 5]
print(a == b)
# Вывод
# True