Skip to content

Latest commit

 

History

History
279 lines (207 loc) · 10.7 KB

List.md

File metadata and controls

279 lines (207 loc) · 10.7 KB

Списки

Списки - внутри являются массивами, просто называются списками, но это массива не списки как в других языках, скорость доступа к элементам по индексам происходит за константу и получение длинны списка за константу, также списки, как и строки можно конкатенировать при помощи символа плюса. Списки стараются использовать для хранения значений одинаковых типов.


list Списки

Списки это последовательности, так что они имеют схожий способ доступа, вывести список можно обычной функцией 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 возможных варианта, либо пройтись именно по элементам списка, либо пройтись циклом такое количество раз сколько элементов в списке у нас имеется с допуском к каждому элементу по его индексу.

  1. Пройтись именно по каждому элементу списка, можно просто использовав цикл for на него, мы действительно будем работать с каждым элементом списка, но производить какие-то действия мы будем уже с копией этого элемента, и эти изменения не повлияют на оригиналы из самого списка.
my_list = ['один', 'два', 'три', 'четыре', 'пять']

print(my_list)

for elem in my_list:
    elem += ' !'
    print(elem)

print(my_list)

# ['один', 'два', 'три', 'четыре', 'пять']
# 
# один !
# два !
# три !
# четыре !
# пять !
# 
# ['один', 'два', 'три', 'четыре', 'пять']
  1. Второй способ, пройтись циклом столько сколько есть элементов в списке, с допуском к каждому элементу по его индексу, этот метод требует подсчета количества элементов в списке, и сам индекс цикла будет соответствовать индексу элементов в списке, благодаря чему и будет происходить доступ к элементам, этот метод позволяет изменять значения в исходном списке:
   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
  1. Если просто требуется вывести все элементы списка, то можно использовать функцию строки 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

Методы списков

  1. append() - Добавляет элемент в конец списка

  2. pop() - Удаляет последний элемент из списка, или элемент по переданному индексу, при этом удаленный элемент будет возвращен в переменную.

  3. reverse() - Меняет порядок элементов списка на обратный

  4. sort() - Сортирует в Алфавитный/По возрастанию порядке

  5. 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: первый , второй , третий , четвертый

list присвоение по ссылке и по значению

Когда есть список с которым мы хотим сделать ряд изменений, есть одна тонкость, для добавления элемента в список используем метод .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