Материалы, подготовленные в результате оказания услуги, помогают разобраться в теме и собрать нужную информацию, но не заменяют готовое решение.

Python: Списки и основные операции работы со списками

Статью подготовили специалисты образовательного сервиса Zaochnik.

Содержание:

Методы создания и считывания списков (массивов)

Большая часть программ работает с не одним элементом, а с коллекцией переменных.

Пример 1

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

В случае обработки последовательностей, например, когда нужно было найти наибольший элемент не сохранялась вся последовательность в оперативной памяти. Тем не менее, во многих ситуациях требуется хранить всю последовательность, например, для вывода всех элементов в упорядоченном виде ("сортировка последовательности").

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

python

List1 = [2, 3, 5, 7, 11, 13]

RainbowColors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']

В списке List1 содержится 6 элементов, таких как:

python

List1[0] == 2, List1[1] == 3, List1[2] == 5, List1[3] == 7, List1[4] == 11, List1[5] == 13.

Список RainbowColors состоит из 7 строковых элементов.

Элементы списка, как и символы в строке, также могут индексироваться отрицательными числами, начиная с конца, например:

python

List1[-1] == 13, List1[-6] == 2.

Замечание 1

Чтобы узнать длину списка, то есть количество его элементов, используют встроенную функцию len, например, `len(List1) == 6`.

Теперь рассмотрим различные методы создания и считывания списков.

Во-первых, можно создать пустой список (не содержащий элементы и имеющий длину 0) и добавлять элементы в него с помощью метода append.

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

python

A = []

for i in range(int(input())):

     A.append(int(input()))

В этом примере создается пустой список, далее считывается число элементов, после чего элементы добавляются в конец списка.

Определены также операции для работы со списками:

  • конкатенация (суммирование двух списков) и
  • повторение (умножение списка на число).

Например:

python

A = [1, 2, 3]

B = [4, 5]

C = A + B

D = B * 3

В результате список C станет равным `[1, 2, 3, 4, 5]`, а D будет равен `[4, 5, 4, 5, 4, 5]`. Это позволяет изменить способ считывания: сначала определить размер списка и создать его, а затем использовать цикл, начиная с 0, для считывания каждого элемента:

python

A = [0] * int(input())

for i in range(len(A)):

     A[i] = int(input())

Вывести элементы списка A можно простой командой `print(A)`, что даст результат с квадратными скобками и запятыми между элементами. Такой вывод не всегда удобен; чаще нужно располагать все элементы в одной строке или по одному на каждой новой строке. Приведем два примера с различной организацией цикла:

python

for i in range(len(A)):

     print(A[i])

В этом цикле индекс изменяется, после чего выводится элемент с текущим индексом.

python

for elem in A:

     print(elem, end=' ')

Здесь элементы выводятся в одну строку, разделенные пробелами; цикл проходит по значениям (например, в случае `for elem in ['red', 'green', 'blue']` переменная elem принимает значения 'red', 'green', 'blue').

Срезы списков в Python

Список, как и строку, можно использовать для создания срезов:

python

ListA[i:j]

представляет собой срез из j-i элементов: ListA[i], ListA[i+1], …, ListA[j-1].

python

ListA[i:j:-1]

означает срез от i до j с изменением порядка: ListA[i], ListA[i-1], …, ListA[j+1].

python

ListA[i:j:k]

позволяет создать срез с шагом k: ListA[i], ListA[i+k], ListA[i+2*k],… . Если значение k<0, порядок элементов будет обратным.

При этом числа i или j могут быть опущены, что будет означать "начало списка" или "конец списка".

Замечание 2

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

Например:

python

ListA = [1, 2, 3, 4, 5]

A[2:4] = [7, 8, 9]

В результате получим список, в котором вместо двух элементов ListA[2:4] будет новый список из трех элементов. Теперь список равен `[1, 2, 7, 8, 9, 5]`.

python

ListA = [1, 2, 3, 4, 5, 6, 7]

ListA[::-2] = [10, 20, 30, 40]

Получим список `[40, 2, 30, 4, 20, 6, 10]`. Тут ListA[::-2] составляет список из элементов ListA[-1], ListA[-3], ListA[-5], ListA[-7], которым присваиваются значения 10, 20, 30, 40 соответственно.

Если вы попытаетесь присвоить новое значение непрерывному срезу (с шагом k, не равным 1), то количество старых и новых элементов должно совпадать, в противном случае возникнет ошибка ValueError.

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

Замечание  3

Обратите внимание, что ListA[i] — это операция обращения к отдельному элементу списка, а не к срезу!

Операции со списками в Python

  • `x in A` — проверяет принадлежность элемента к списку. Возвращает True или False.
  • `x not in A` — эквивалентно `not(x in A)`.
  • `min(A)` — наименьший элемент списка.
  • `max(A)` — наибольший элемент списка.
  • `A.index(x)` — индекс первого вхождения элемента x; при отсутствии выбрасывает исключение ValueError.
  • `A.count(x)` — количество вхождений элемента x в список.
  • `A.sort()` — сортировка списка (изменяет сам список без возвращения значения).
  • `sum(A)` — возвращает сумму всех элементов списка.
  • `A.append(x)` — добавляет элемент x в конец списка.
  • `A.extend(L)` — добавляет все элементы списка L в конец списка A.

Навигация по статьям

Выполненные работы по программированию

  • Программирование

    НИР на тему Автоматизированое рабочее места специалиста по социальной работе

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      25 февраля 2020

    • Стоимость:

      1 900 руб.

    Заказать такую же работу
  • Программирование

    Обеспечение защиты информации при использовании системы электронного документооборота

    • Вид работы:

      Реферат

    • Выполнена:

      29 декабря 2019

    • Стоимость:

      500 руб.

    Заказать такую же работу
  • Программирование

    Искусственный интеллект. Достижения и перспективы развития.

    • Вид работы:

      Эссе

    • Выполнена:

      11 декабря 2019

    • Стоимость:

      800 руб.

    Заказать такую же работу
  • Программирование

    Айти. Заполнить дневник практики.

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      9 декабря 2019

    • Стоимость:

      1 800 руб.

    Заказать такую же работу
  • Программирование

    Если свободное общество не сможет помочь многим бедным, оно не сможет защитить немногих богатых

    • Вид работы:

      Эссе

    • Выполнена:

      8 декабря 2019

    • Стоимость:

      1 000 руб.

    Заказать такую же работу
  • Программирование

    Двоичные деревья поиска, Организация поиска в массиве данных при помощи специальных методов поиска, Сортировка

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      28 октября 2019

    • Стоимость:

      1 700 руб.

    Заказать такую же работу