Введение
В этом разделе介绍lists, основной тип в Python для хранения упорядоченной коллекции значений.
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(',')
Попробуйте несколько обращений по индексу:
>>> 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
.
Цикл for
работает путём перебора данных в последовательности, такой как список. Проверьте это, введя следующий цикл и наблюдая за тем, что происходит:
>>> for s in symlist:
print('s =', s)
## Посмотрите на вывод
Используйте операторы in
или not in
, чтобы проверить, содержатся ли в списке символов 'AIG'
, 'AA'
и 'CAT'
.
>>> ## Содержится ли 'AIG' В `symlist`?
True
>>> ## Содержится ли 'AA' В `symlist`?
False
>>> ## Не содержится ли 'CAT' В `symlist`?
True
>>>
Используйте метод 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.
Хотите отсортировать список? Используйте метод sort()
. Попробуйте:
>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>
Хотите отсортировать в обратном порядке? Попробуйте это:
>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>
Примечание: сортировка списка изменяет его содержимое "на месте". То есть элементы списка перемешиваются, но в результате не создается новый список.
Хотите взять список строк и объединить их в одну строку? Используйте метод 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'
>>>
Списки могут содержать любые виды объектов, включая другие списки (например, вложенные списки). Попробуйте это:
>>> 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, чтобы улучшить свои навыки.