Введение в основы списков Python

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом разделе介绍lists, основной тип в Python для хранения упорядоченной коллекции значений.

Создание списка

Используйте квадратные скобки для определения литерала списка:

names = [ 'Elwood', 'Jake', 'Curtis' ]
nums = [ 39, 38, 42, 65, 111]

Иногда списки создаются другими методами. Например, строку можно разбить на список с использованием метода split():

>>> line = 'GOOG,100,490.10'
>>> row = line.split(',')
>>> row
['GOOG', '100', '490.10']
>>>

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

Списки могут содержать элементы любого типа. Добавьте новый элемент с использованием append():

names.append('Murphy')    ## Добавляет в конец
names.insert(2, 'Aretha') ## Вставляет в середину

Используйте + для конкатенации списков:

s = [1, 2, 3]
t = ['a', 'b']
s + t           ## [1, 2, 3, 'a', 'b']

Списки индексируются целыми числами. Начиная с 0.

names = [ 'Elwood', 'Jake', 'Curtis' ]

names[0]  ## 'Elwood'
names[1]  ## 'Jake'
names[2]  ## 'Curtis'

Отрицательные индексы считаются с конца.

names[-1] ## 'Curtis'

Вы можете изменить любой элемент в списке.

names[1] = 'Joliet Jake'
names                     ## [ 'Elwood', 'Joliet Jake', 'Curtis' ]

Длина списка.

names = ['Elwood','Jake','Curtis']
len(names)  ## 3

Проверка на принадлежность (in, not in).

'Elwood' in names       ## True
'Britney' not in names  ## True

Дублирование (s * n).

s = [1, 2, 3]
s * 3   ## [1, 2, 3, 1, 2, 3, 1, 2, 3]

Итерация и поиск в списке

Используйте for, чтобы перебрать содержимое списка.

for name in names:
    ## используйте name
    ## например, print(name)
  ...

Это похоже на инструкцию foreach из других языков программирования.

Для быстрого поиска позиции элемента используйте index().

names = ['Elwood','Jake','Curtis']
names.index('Curtis')   ## 2

Если элемент встречается более одного раза, index() вернет индекс первого вхождения.

Если элемент не найден, будет вызвана ошибка ValueError.

Удаление элементов из списка

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

## Используя значение
names.remove('Curtis')

## Используя индекс
del names[1]

При удалении элемента не создается пропуск. Другие элементы сдвигаются вниз, чтобы заполнить освободившееся место. Если элемент встречается более одного раза, remove() удалит только первое вхождение.

Сортировка списков

Списки можно сортировать "на месте".

s = [10, 1, 7, 3]
s.sort()                    ## [1, 3, 7, 10]

## Обратный порядок
s = [10, 1, 7, 3]
s.sort(reverse=True)        ## [10, 7, 3, 1]

## Это работает с любыми упорядоченными данными
s = ['foo', 'bar','spam']
s.sort()                    ## ['bar', 'foo','spam']

Используйте sorted(), если вы хотите создать новый список вместо этого:

t = sorted(s)               ## s остается неизменным, t содержит отсортированные значения

Списки и математика

Внимание: списки не были разработаны для математических операций.

>>> nums = [1, 2, 3, 4, 5]
>>> nums * 2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> nums + [10, 11, 12, 13, 14]
[1, 2, 3, 4, 5, 10, 11, 12, 13, 14]

В частности, списки не представляют векторы/матрицы, как это делает MATLAB, Octave, R и т.д. Однако, есть некоторые пакеты, которые могут помочь вам с этим (например, numpy).

В этом упражнении мы проводим эксперименты с типом данных списка в Python. В предыдущем разделе вы работали со строками, содержащими символы акций.

>>> symbols = 'HPQ,AAPL,IBM,MSFT,YHOO,DOA,GOOG'

Разделите ее на список имен с использованием операции split() для строк:

>>> symlist = symbols.split(',')

Упражнение 1.19: Извлечение и перезапись элементов списка

Попробуйте несколько обращений по индексу:

>>> symlist[0]
'HPQ'
>>> symlist[1]
'AAPL'
>>> symlist[-1]
'GOOG'
>>> symlist[-2]
'DOA'
>>>

Попробуйте перезаписать одно значение:

>>> symlist[2] = 'AIG'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'DOA', 'GOOG']
>>>

Возьмите несколько срезов:

>>> symlist[0:3]
['HPQ', 'AAPL', 'AIG']
>>> symlist[-2:]
['DOA', 'GOOG']
>>>

Создайте пустой список и добавьте в него элемент.

>>> mysyms = []
>>> mysyms.append('GOOG')
>>> mysyms
['GOOG']

Вы можете перезаписать часть списка другим списком. Например:

>>> symlist[-2:] = mysyms
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG']
>>>

Когда вы это делаете, список слева (symlist) будет изменен размером в соответствии с тем, чтобы вместить список справа (mysyms). Например, в вышеприведенном примере последние два элемента symlist были заменены одним элементом списка mysyms.

Упражнение 1.20: Цикл по элементам списка

Цикл for работает путём перебора данных в последовательности, такой как список. Проверьте это, введя следующий цикл и наблюдая за тем, что происходит:

>>> for s in symlist:
        print('s =', s)
## Посмотрите на вывод

Упражнение 1.21: Тестирование принадлежности

Используйте операторы in или not in, чтобы проверить, содержатся ли в списке символов 'AIG', 'AA' и 'CAT'.

>>> ## Содержится ли 'AIG' В `symlist`?
True
>>> ## Содержится ли 'AA' В `symlist`?
False
>>> ## Не содержится ли 'CAT' В `symlist`?
True
>>>
✨ Проверить решение и практиковаться

Упражнение 1.22: Добавление, вставка и удаление элементов

Используйте метод append(), чтобы добавить символ 'RHT' в конец symlist.

>>> symlist.append('RHT') ## добавить 'RHT'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>

Используйте метод insert(), чтобы вставить символ 'AA' в качестве второго элемента списка.

>>> symlist.insert(1, 'AA') ## Вставить 'AA' в качестве второго элемента списка
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>

Используйте метод remove(), чтобы удалить 'MSFT' из списка.

>>> symlist.remove('MSFT') ## Удалить 'MSFT'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT']
>>>

Добавьте дублирующийся элемент 'YHOO' в конец списка.

Примечание: для списка вполне нормально иметь дублирующие значения.

>>> symlist.append('YHOO') ## Добавить 'YHOO'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT', 'YHOO']
>>>

Используйте метод index(), чтобы найти первую позицию 'YHOO' в списке.

>>> symlist.index('YHOO') ## Найти первый индекс 'YHOO'
4
>>> symlist[4]
'YHOO'
>>>

Подсчитайте, сколько раз 'YHOO' встречается в списке:

>>> symlist.count('YHOO')
2
>>>

Удалите первое вхождение 'YHOO'.

>>> symlist.remove('YHOO') ## Удалить первое вхождение 'YHOO'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'GOOG', 'RHT', 'YHOO']
>>>

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

Упражнение 1.23: Сортировка

Хотите отсортировать список? Используйте метод sort(). Попробуйте:

>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>

Хотите отсортировать в обратном порядке? Попробуйте это:

>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>

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

Упражнение 1.24: Собираем все вместе

Хотите взять список строк и объединить их в одну строку? Используйте метод join() для строк так (заметьте: сначала это выглядит странно).

>>> a = ','.join(symlist)
>>> a
'YHOO,RHT,HPQ,GOOG,AIG,AAPL,AA'
>>> b = ':'.join(symlist)
>>> b
'YHOO:RHT:HPQ:GOOG:AIG:AAPL:AA'
>>> c = ''.join(symlist)
>>> c
'YHOORHTHPQGOOGAIGAAPLAA'
>>>

Упражнение 1.25: Списки любых объектов

Списки могут содержать любые виды объектов, включая другие списки (например, вложенные списки). Попробуйте это:

>>> nums = [101, 102, 103]
>>> items = ['spam', symlist, nums]
>>> items
['spam', ['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA'], [101, 102, 103]]

Обратите особое внимание на вывод выше. items - это список с тремя элементами. Первый элемент - это строка, а другие два элемента - списки.

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

>>> items[0]
'spam'
>>> items[0][0]
's'
>>> items[1]
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>> items[1][1]
'RHT'
>>> items[1][1][2]
'T'
>>> items[2]
[101, 102, 103]
>>> items[2][1]
102
>>>

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

Резюме

Поздравляем! Вы завершили лабораторную работу по спискам. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.