Python. Урок 7. Работа со списками (list)

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

Что такое список (list) в Python?

Список (list) – это структура данных для хранения объектов различных типов. Если вы использовали другие языки программирования, то вам должно быть знакомо понятие массива. Так вот, список очень похож на массив, только, как было уже сказано выше, в нем можно хранить объекты различных типов. Размер списка не статичен, его можно изменять. Список по своей природе является изменяемым типом данных. Про типы данных можно подробно прочитать здесь. Переменная, определяемая как список, содержит ссылку на структуру в памяти, которая в свою очередь хранит ссылки на какие-либо другие объекты или структуры.

Как списки хранятся в памяти?

Как уже было сказано выше, список является изменяемым типом данных. При его создании в памяти резервируется область, которую можно условно назвать некоторым “контейнером”, в котором хранятся ссылки на другие элементы данных в памяти. В отличии от таких типов данных как число или строка, содержимое “контейнера” списка можно менять. Для того, чтобы лучше визуально представлять себе этот процесс взгляните на картинку ниже. Изначально был создан список содержащий ссылки на объекты 1 и 2, после операции a[1] = 3, вторая ссылка в списке стала указывать на объект 3.

Пример изменяемого объекта

Более подробно эти вопросы обсуждались в уроке 3 (Типы и модель данных).

Создание, изменение, удаление списков и работа с его элементами

Создать список можно одним из следующих способов.

>>> a = [] 
>>> type(a) 
<class 'list'> 
>>> b = list() 
>>> type(b) 
<class 'list'>

Также можно создать список с заранее заданным набором данных.

>>> a = [1, 2, 3] 
>>> type(a) 
<class 'list'>

Если у вас уже есть список и вы хотите создать его копию, то можно воспользоваться следующим способом:

>>> a = [1, 3, 5, 7] 
>>> b = a[:] 
>>> print(a) 
[1, 3, 5, 7] 
>>> print(b) 
[1, 3, 5, 7]

или сделать это так:

>>> a = [1, 3, 5, 7] 
>>> b = list(a) 
>>> print(a) 
[1, 3, 5, 7] 
>>> print(b) 
[1, 3, 5, 7]

В случае, если вы выполните простое присвоение списков друг другу, то переменной b будет присвоена ссылка на тот же элемент данных в памяти, на который ссылается a, а не копия списка а. Т.е. если вы будете изменять список a, то и b тоже будет меняться.

>>> a = [1, 3, 5, 7] 
>>> b = a 
>>> print(a) 
[1, 3, 5, 7] 
>>> print(b) 
[1, 3, 5, 7] 
>>> a[1] = 10 
>>> print(a) 
[1, 10, 5, 7] 
>>> print(b) 
[1, 10, 5, 7]

Добавление элемента в список осуществляется с помощью метода append().

>>> a = [] 
>>> a.append(3) 
>>> a.append("hello") 
>>> print(a) 
[3, 'hello']

Для удаления элемента из списка, в случае, если вы знаете его значение, используйте метод remove(x), при этом будет удалена первая ссылка на данный элемент.

>>> b = [2, 3, 5] 
>>> print(b) 
[2, 3, 5] 
>>> b.remove(3) 
>>> print(b) 
[2, 5]

Если необходимо удалить элемент по его индексу, воспользуйтесь командой del имя_списка[индекс].

>>> c = [3, 5, 1, 9, 6] 
>>> print(c) 
[3, 5, 1, 9, 6] 
>>> del c[2] 
>>> print(c) 
[3, 5, 9, 6]

Изменить значение элемента списка, зная его индекс, можно напрямую к нему обратившись.

>>> d = [2, 4, 9] 
>>> print(d) 
[2, 4, 9] 
>>> d[1] = 17 
>>> print(d) 
[2, 17, 9]

Очистить список можно просто заново его проинициализировав, так как будто вы его вновь создаете. Для получения доступа к элементу списка укажите индекс этого элемента в квадратных скобках.

>>> a = [3, 5, 7, 10, 3, 2, 6, 0] 
>>> a[2] 
7

Можно использовать отрицательные индексы, в таком случае счет будет идти с конца, например для доступа к последнему элементу списка можно использовать вот такую команду:

>>> a[-1] 
0

Для получения из списка некоторого подсписка в определенном диапазоне индексов, укажите начальный и конечный индекс в квадратных скобках, разделив их двоеточием.

>>> a[1:4] 
[5, 7, 10]

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

list.append(x)

Добавляет элемент в конец списка. Ту же операцию можно сделать так a[len(a):] = [x].

>>> a = [1, 2] 
>>> a.append(3) 
>>> print(a) 
[1, 2, 3]

list.extend(L)

Расширяет существующий список за счет добавления всех элементов из списка L. Эквивалентно команде a[len(a):] = L.

>>> a = [1, 2] 
>>> b = [3, 4] 
>>> a.extend(b) 
>>> print(a) 
[1, 2, 3, 4]

list.insert(i, x)

Вставить элемент x в позицию i.  Первый аргумент – индекс элемента после которого будет вставлен элемент x.

>>> a = [1, 2] 
>>> a.insert(0, 5) 
>>> print(a) 
[5, 1, 2] 
>>> a.insert(len(a), 9) 
>>> print(a) 
[5, 1, 2, 9]

list.remove(x)

Удаляет первое вхождение элемента x из списка.

>>> a = [1, 2, 3] 
>>> a.remove(1) 
>>> print(a) 
[2, 3]

list.pop([i])

Удаляет элемент из позиции i и возвращает его. Если использовать метод без аргумента, то будет удален последний элемент из списка.

>>> a = [1, 2, 3, 4, 5] 
>>> print(a.pop(2)) 
3 
>>> print(a.pop()) 
5 
>>> print(a) 
[1, 2, 4]

list.clear()

Удаляет все элементы из списка. Эквивалентно del a[:].

>>> a = [1, 2, 3, 4, 5] 
>>> print(a) 
[1, 2, 3, 4, 5] 
>>> a.clear() 
>>> print(a) 
[]

list.index(x[, start[, end]])

Возвращает индекс элемента.

>>> a = [1, 2, 3, 4, 5] 
>>> a.index(4) 
3

list.count(x)

Возвращает количество вхождений элемента x в список.

>>> a=[1, 2, 2, 3, 3] 
>>> print(a.count(2)) 
2

list.sort(key=None, reverse=False)

Сортирует элементы в списке по возрастанию. Для сортировки в обратном порядке используйте флаг reverse=True. Дополнительные возможности открывает параметр key, за более подробной информацией обратитесь к документации.

>>> a = [1, 4, 2, 8, 1] 
>>> a.sort() 
>>> print(a) 
[1, 1, 2, 4, 8]

list.reverse()

Изменяет порядок расположения элементов в списке на обратный.

>>> a = [1, 3, 5, 7] 
>>> a.reverse() 
>>> print(a) 
[7, 5, 3, 1]

list.copy()

Возвращает копию списка. Эквивалентно a[:].

>>> a = [1, 7, 9] 
>>> b = a.copy() 
>>> print(a) 
[1, 7, 9] 
>>> print(b) 
[1, 7, 9] 
>>> b[0] = 8 
>>> print(a) 
[1, 7, 9] 
>>> print(b) 
[8, 7, 9]

List Comprehensions

List Comprehensions чаще всего на русский язык переводят как  абстракция списков или списковое включение, является частью синтаксиса языка, которая предоставляет простой способ построения списков. Проще всего работу list comprehensions показать на примере. Допустим вам необходимо создать список целых чисел от 0 до n, где n предварительно задается. Классический способ решения данной задачи выглядел бы так:

>>> n = int(input())
7
>>> a=[]
>>> for i in range(n):
        a.append(i)

>>> print(a)
[0, 1, 2, 3, 4, 5, 6]

Использование list comprehensions позволяет сделать это значительно проще:

>>> n = int(input())
7
>>> a = [i for i in range(n)]
>>> print(a)
[0, 1, 2, 3, 4, 5, 6]

или вообще вот так, в случае если вам не нужно больше использовать n:

>>> a = [i for i in range(int(input()))]
7
>>> print(a)
[0, 1, 2, 3, 4, 5, 6]

List Comprehensions как обработчик списков

В языке Python есть две очень мощные функции для работы с коллекциями: map и filter. Они позволяют использовать функциональный стиль программирования, не прибегая к помощи циклов, для работы с такими типами как list, tuple, set, dict и т.п. Списковое включение позволяет обойтись без этих функций. Приведем несколько примеров для того, чтобы понять о чем идет речь.

Пример с заменой функции map.

Пусть у нас есть список и нужно получить на базе него новый, который содержит элементы первого, возведенные в квадрат. Решим эту задачу с использованием циклов:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> b = []
>>> for i in a:
        b.append(i**2)

>>> print('a = {}\nb = {}'.format(a, b))
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 4, 9, 16, 25, 36, 49]

Та же задача, решенная с использованием map, будет выглядеть так:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> b = list(map(lambda x: x**2, a))
>>> print('a = {}\nb = {}'.format(a, b))
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 4, 9, 16, 25, 36, 49]

В данном случае применена lambda-функция, о том, что это такое и как ее использовать можете прочитать здесь.

Через списковое включение эта задача будет решена так:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> b = [i**2 for i in a]
>>> print('a = {}\nb = {}'.format(a, b))
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 4, 9, 16, 25, 36, 49]

Пример с заменой функции filter.

Построим на базе существующего списка новый, состоящий только из четных чисел:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> b = []
>>> for i in a:
        if i%2 == 0:
            b.append(i)

>>> print('a = {}\nb = {}'.format(a, b))
a = [1, 2, 3, 4, 5, 6, 7]
b = [2, 4, 6]

Решим эту задачу с использованием filter:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> b = list(filter(lambda x: x % 2 == 0, a))
>>> print('a = {}\nb = {}'.format(a, b))
a = [1, 2, 3, 4, 5, 6, 7]
b = [2, 4, 6]

Решение через списковое включение:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> b = [i for i in a if i % 2 == 0]
>>> print('a = {}\nb = {}'.format(a, b))
a = [1, 2, 3, 4, 5, 6, 7]
b = [2, 4, 6]

Слайсы / Срезы

Слайсы (срезы) являются очень мощной составляющей Python, которая позволяет быстро и лаконично решать задачи выборки элементов из списка. Выше уже был пример использования слайсов, здесь разберем более подробно работу с ними. Создадим список для экспериментов:

>>> a = [i for i in range(10)]

Слайс задается тройкой чисел, разделенных запятой: start:stop:step. Start – позиция с которой нужно начать выборку, stop – конечная позиция, step – шаг. При этом необходимо помнить, что выборка не включает элемент определяемый stop.

Рассмотрим примеры:

>>> # Получить копию списка
>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> # Получить первые пять элементов списка
>>> a[0:5]
[0, 1, 2, 3, 4]

>>> # Получить элементы с 3-го по 7-ой
>>> a[2:7]
[2, 3, 4, 5, 6]

>>> # Взять из списка элементы с шагом 2
>>> a[::2]
[0, 2, 4, 6, 8]

>>> # Взять из списка элементы со 2-го по 8-ой с шагом 2
>>> a[1:8:2]
[1, 3, 5, 7]

Слайсы можно сконструировать заранее, а потом уже использовать по мере необходимости. Это возможно сделать, в виду того, что слайс – это объект класса slice. Ниже приведен пример, демонстрирующий эту функциональность:

>>> s = slice(0, 5, 1)
>>> a[s]
[0, 1, 2, 3, 4]

>>> s = slice(1, 8, 2)
>>> a[s]
[1, 3, 5, 7]

Типо “List Comprehensions”… в генераторном режиме

Есть ещё одни способ создания списков, который похож на списковое включение, но результатом работы является не объект класса list, а генератор. Подробно про генераторы написано в “Уроке 15. Итераторы и генераторы“.

Предварительно импортируем модуль sys, он нам понадобится:

>>> import sys

Создадим список, используя списковое включение :

>>> a = [i for i in range(10)]

проверим тип переменной a:

>>> type(a)
<class 'list'>

и посмотрим сколько она занимает памяти в байтах:

>>> sys.getsizeof(a)
192

Для создания объекта-генератора, используется синтаксис такой же как и для спискового включения, только вместо квадратных скобок используются круглые:

>>> b = (i for i in range(10))

>>> type(b)
<class 'generator'>

>>> sys.getsizeof(b)
120

Обратите внимание, что тип этого объекта ‘generator’, и в памяти он занимает места меньше, чем список, это объясняется тем, что в первом случае в памяти хранится весь набор чисел от 0 до 9, а во втором функция, которая будет нам генерировать числа от 0 до 9. Для наших примеров разница в размере не существенна, рассмотрим вариант с 10000 элементами:

>>> c = [i for i in range(10000)]

>>> sys.getsizeof(c)
87624

>>> d = (i for i in range(10000))

>>> sys.getsizeof(d)
120

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

Если вы решаете задачу обхода списка, то  принципиальной разницы между списком и генератором не будет:

>>> for val in a:
        print(val, end=' ')

0 1 2 3 4 5 6 7 8 9 

>>> for val in b:
        print(val, end=' ')

0 1 2 3 4 5 6 7 8 9

Но с генератором нельзя работать также как и со списком: нельзя обратиться к элементу по индексу и т.п.

P.S.

Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

<<< Python. Урок 6. Работа с IPython и Jupyter Notebook   Python. Урок 8. Кортежи (tuple) >>>

Python. Урок 7. Работа со списками (list): 53 комментария

  1. навруз

    там ошибка
    Изменить значение элемента списка, зная его индекс, можно напрямую к нему обратившись.

    >>> d = [2, 4, 9]
    >>> print(d)
    [2, 4, 9]
    >>> d[1] = 17 индекс указан первый, следовательно должен измениться первый элемент.
    >>> print(d)
    [2, 17, 9] а тут изменен второй элемент. Вывод должен выглядеть так [17, 4, 9] Если я не
    ошибаюсь)))

    1. writer

      В Python элементы списка нумеруются с нуля. Поэтому в списке [2, 4, 9], элемент с индексом 1 – это 4, и если мы сделаем присваивание d[1] = 17, то поменяем средний элемент в списке, так как это показано в примере!
      Удачи!

      1. навруз

        ой спасибо за обьяснение)) изивиняюсь за ложные обвинения и невнимательность)))

    2. Артём

      Нумераци индексов списка идёт не с едины (1) а с нуля следовательно чтобы вам вместо двоики поставить число 17
      d [0] = 17
      print (d)

    3. Станислав

      Это не только в Python так, это вообще в программировании. В любом языке, насколько я знаю.

    4. Кирилл

      Счёт в python начинается с 0 , следовательно [1]-это вторая позиция списка.

  2. Tet

    Подскажите,пожалуйста, как быстро (не используя перебор по индексно ) проверить равно ли произвольное значение одному из значений списка ?
    Например у меня есть список d=[2,4,12,5]
    Ввели а=4
    Если значение а есть в списке, то вывести “+”. Если нет ,то “-“

    1. writer

      Можно сделать так:
      d = [2, 4, 12, 5]
      a = 4
      if a in d:
          print(“YES”)
      Только четыре пробела не забудьте перед print(“YES”) (в комментах не получается код нужным образом отформатировать)

      1. яяяя

        ну, как бы, есть in, который вернет True, если такой элемент есть, и False иначе. И есть count, который вернет количество элементов, если есть такие. Зачем именно сравнивать?

  3. Михаил

    Можно и не 4 пробела, а всего 1. А лучше всего табуляция.

    1. writer

      Нее! Нужно именно четыре)) Но проблема уже решена!

  4. Ян

    Здравствуйте! А можете, пожалуйста, объяснить, как работает “for in” со списками. Я не понимаю. Я привык к языкам, где в основном доступ по индексу, сложно понять работу “for in”. Как работает цикл: по индексам от 0 до длины списка, или абы как достает элемент, т.е. необязательно по возрастанию индекса элемента? Мне бы хотелось знать индекс элемента, который я обрабатываю в цикле. Лучше завести отдельно переменную counter, которая будет считать или использовать list.index(value). Или во втором случае будет вызываться не атрибут элемента, а будет происходить именно поиск такого элемента, т.е. сложность будет линейная?

    1. writer

      Добрый день!
      Постараюсь в двух словах объяснить, 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]))

      0 -- a
      1 -- b
      2 -- c

      За более подробной информацией рекомендую прочитать следующие статьи:
      Помощники цикла for в Python
      Python. Урок 15. Итераторы и генераторы

      1. Serg153

        Еще надо учесть, что когда вы работаете со списком, перебирая его ЭЛЕМЕНТЫ с помощью for, изменение этих ЭЛЕМЕНТОВ не ведет к изменению элементов самого списка (как бы дико это ни звучало!). Это – очень разные элементы. Поясню на примере.
        При обработке списка может возникнуть потребность изменить элемент списка по какому-то условию.
        Например, есть список
        F_List = [1,2,3,4,6,9] и требуется проверить все элементы, и каждый элемент, который равен 4, увеличить на 10.
        Казалось бы, берем элемент списка, сравниваем с 4, если “да”, меняем элемент, если “нет”, берем следующий. Т.е.:
        F_List = [1,2,3,4,6,9]
        for element in F_List:
        if element == 4:
        element += 10
        Однако, проверив список:
        print(F_List)
        получим
        [1, 2, 3, 4, 6, 9]
        Т.к. я комментирую вопрос новичка, не буду углубляться в теорию, и объяснять, почему так происходит. Как говорится в известном анекдоте: “Эта нэвазможна панят, эта нада запомнит”.
        Изменить элемент списка можно только, обратившись к самому списку по индексу элемента, который можно определить вызвав функцию index(). Например, вот так:
        F_List = [1,2,3,4,6,9]
        for element in F_List:
        if element == 4: # т.е. проверять element можно!!!
        F_List[F_List.index(element)] += 10 # но вот присваивать значение нужно совсем другой штуке:
        # N-ному элементу списка, при этом N – это индекс element’a
        # Вот такой он, Python!!!
        Проверим:
        print(F_List)
        Получим:
        [1, 2, 3, 14, 6, 9] т.е. именно то, что мы и хотели

        1. Serg153

          И, кстати, дополню, что более коротким (но, наверное, с первого раза – менее понятным) способом обработать список из примера выше можно единственным генератором:

          F_List = [element+10 if element==4 else element for element in F_List]

        2. red007

          можно и так

          a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
          print(a)
          for i in a:
          if i == 4:
          a[i] += 10
          print(a)

          ВЫВОД БУДЕТ ТАКИМ

          [1, 2, 3, 4, 5, 6, 7, 8, 9]
          [1, 2, 3, 4, 15, 6, 7, 8, 9]

  5. Артем

    Здравствуйте! Возможно ли с помощью команды pop удаление несколько элементов списка или промежуток? Если да напишите пожалуйста пример.
    Что,то похожее с:

    motorcycles_5 = [‘ducati’, ‘honda’, ‘ktm’, ‘motogucci’, ‘yamaha’, ‘suzuki’, ‘ural’]
    # Удаляю элементы списка motorcycles_5 с 0 по 3
    del motorcycles_5[0:3]
    print(motorcycles_5)
    # Удаляю все элеметы списка motorcycles_5 с помощью команды del
    del motorcycles_5[:]
    print(motorcycles_5)

    1. writer

      Добрый день!
      Нет, с помощью pop нельзя удалить за раз несколько элементов списка. Его назначение – извлечение элемента (чаще всего последнего). А чем вас не устраивает del?

  6. Александар

    Наверное опечатка?

    в примере для
    >>list.insert(i, x)
    написано так:
    “Вставить элемент x в позицию i. Первый аргумент – индекс элемента после* которого будет вставлен элемент x.”

    *хотя, по смыслу примера, вставка происходит прямо по индексу i, а не после. Элементы сдвигаются.

  7. Артем

    Для получения из списка некоторого подсписка в определенном диапазоне индексов, укажите начальный и конечный индекс в квадратных скобках, разделив их двоеточием.

    >>> a[1:4]
    [5, 7, 10]

    Это же упоминается работа с подмножеством, элементов списка ‘a’. Подмножество списка в python называется срез (slice)

  8. Виталий

    Почему у всех объектов один список?
    lis = []

    class O:
    k = []

    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]

    1. Serg153

      А Вы не могли бы написать пример Вашей программы (т.к. сайт “обрезает отступы) с комментариями в виде:

      lis = [] # нет отступов
      class O: # нет отступов
      k = [] # 4 отступа
      for i in range(4): # 8 отступов
      o = O() # 12 отступов
      и т.д.
      Тогда будет понятнее, где искать ошибку. И, кстати, а что Вы хотели получить, т.е. какова идея программы?
      И не используйте, пожалуйста, имена типа O, o, l и т.п. (см. PEP 808).

  9. Вадим

    Здравствуйте! Изучаю пайтон и столкнулся с такой проблемкой. У меня есть много списков, которые состоят из текста в формате:
    [list1]
    [list2]
    ..
    [list n]
    Подскажите, пож, могу ли я все эти списки объединить в один список и как?

  10. Николай

    Здравствуйте. Как в списке определить сколько раз встречается цифра? Отличный сайт!!!!

    1. Serg153

      Вопрос не очень понятен: уточните вид списка (он состоит из одиночных символов или из строк произвольной длины, или тип данных в списке не определен…), нужно определить частоту какой-то конкретной цифры или просто любой цифры от 0 до 9 и т.п.? Может, просто приведете условный пример списка?

  11. Nazgul

    Как вычислить четные числа в списке?
    import array as arr
    a = arr.array(‘i’)
    for i in range(0,20):
    if a[i]%2 == 0:
    print(“Zhup sandar = “, a[i])

  12. Прог

    есть список
    работа со списками:
    sp = [23, 40, 60, 70, 60]
    команда print(sp.index(60))
    возвращает в списке индекс счисла “60”.
    тоесть возвратит цифру “2”.
    Вопрос.:Как возвратить индекс второго числа “60” в списке?

  13. Прог

    ест ьсписко
    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”

    1. Александр

      1. можно написать короче
      sp = [90, 90, 57, 23, 65, 46]
      for i in sp: print(sp.index(next(itr))) # написал в одну строку, чтоб избежать проблем с пробелами, так тоже будет работать

      не понятно зачем в примере используется iter
      2. sp.index метод возвращает не индекс текущего элемента, а индекс ПЕРВОГО НАЙДЕННОГО элемента в вашем случае 90 впервые встречается в списке под индексом 0

      3. для получения индекса используйте метод enumerate
      Например так…
      for i, e in enumerate(sp): print(i,e)

  14. Shokozavr

    Здраствуйте, а можете подсказать как изменить знак на всех элементах списка?

    1. Александр

      Если у вас список состоящий из чисел, то можно сделать несколькими способами, например так:
      sp = [90, -90, 57.5, 23, 65.7, 46] # список чисел
      L = [e*-1 for e in sp] # меняем знак и сохраняем в переменную L (можно и перезаписать sp)

      Если более подробно, то так:
      sp = [90, -90, 57.5, 23, 65.7, 46] # список чисел
      L = [] # создаём новый список
      for e in sp: # перебираем все элементы
      L.append(e*-1) # добавляем в новый список текущий элемент умноженный на -1 (меняем так знак)

  15. Binee

    Здравствуйте, подскажите пожалуйста как я могу поменять элементы списка задом наперед не используя отрицательный срез и функцию reserve? Чтобы получись х=[10,9,8,7,6,5,4,3,2,1] вместо х=[1,2,3,4,5,6,7,8,9,10]

    1. Александр

      да, но имей в виду
      1. у тебя в примере русская буква “х”, а не латинский икс 😉
      2. вызвав х.reverse(), в переменной х сохранится развернутый список

  16. Алексей

    Типо “List Comprehensions”… в генераторном режиме

    Есть ещё >>одни<< способ создания списков, который похож на списково…

    Спасибо Вам

  17. Александр

    Автору спасибо! Отличная статья.
    Сам только изучаю Python но такого качества статей не много
    Понравилось, что не просто обзор методов класса, а то что автор:
    1. расширил их с помощью методов типа map и filter, здоро во еще было бы добавить несколько еще методов, например enumerate
    2. всё сопровождается примерами, причём разными на разный уровень читателя 🙂

    А еще молодцы те, кто в комментах задают вопросы, это почти как ДЗ для усвоения материала))

  18. Михаил

    Добрый день! Изучаю 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])”, но что-то мне подсказывает, что такое решение в корне не верно. Прошу подсказать, как осуществлять поиск значения в списке списков?

  19. Бартышева Любовь

    Добрый день. Подскажите, а как сделать, что данные вводим просто числа, а в результате должны получить список этих же чисел, но уже в одиночных кавычках

    1. Александр

      data = 4,6,7,8 … # и т. д какие-то числа
      data = list(data)
      print(data)

      >>> [4, 6, 7, 8]

  20. Станислав

    выборка и slice какие-то странные. a[0:4] Тут 0 это индекс элемента списка (начиная с 0), а 4 номер элемента по порядку (начиная с 1). Ну как-то одним способом индексировать было бы понятней и проще. Тоже самое с -slice(0,4,1)

  21. Andrii

    Всем привет.
    Начал изучать пайтон, не мгу решить проблему:
    lis[1,2,3,[‘a’,’b’,’c’,55]]
    вибрать елемент по его номеру через print(…)
    програма видает такое:
    TypeError: ‘int’ object is not subscriptable

  22. Екатерина

    Добрый день, подскажите пож. как найти самую длинную последовательность в списке через for и if
    пример
    a = [1,2,5,5,5,5,4,5]

  23. Александр

    List Comprehensions – всё что ниже этого, мозг отказывается понимать, начинает дыметь и вытекать. )))
    А вообще тут сложно описывают простые вещи. К примеру, если что то тут непонятно, ищу объяснение на других ресурсах, оказывается всё просто, а тут слишком заумно подано.

  24. Мира

    Если у массива А(20) есть элемент, равный квадрату последнего элемента, то все элементы, следующие за ним, возвести в квадрат, иначе вывести массив без изменения. Помогите написать.
    a = input(1:20)
    for i in A(i)=sqr A(20):
    A(i+1)=sqrA(i+1)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *