Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Python / Учебник Python 3.1 / Структуры данных /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Подробнее о списках - Программирование от RIN.RU
Подробнее о списках

У типа данных список также имеются не описанные ранее методы. Ниже приведены все методы объекта типа список:

list.append(x)


Добавить элемент к концу списка; эквивалент a[len(a):] = [x]

list.extend(L)


Расширить список за счёт добавления всех элементов переданного списка; эквивалентно a[len(a):] = L.

list.insert(i, x)


Вставить элемент в указанную позицию. Первый аргумент - это индекс того элемента, перед которым требуется выполнить операцию вставки, поэтому вызов a.insert(0, x) вставляет элемент в начало списка, а a.insert(len(a), x) эквивалентно a.append(x).

list.remove(x)


Удалить первый найденный элемент из списка, значение которого - x. Если элемент не найден, генерируется ошибка.

list.pop([i])


Удалить элемент, находящийся на указанной позиции в списке, и возвратить его. Если индекс не указан, a.pop() удаляет и возвращает последний элемент списка. (Квадратные скобки вокруг i в сигнатуре метода означают, что параметр необязателен, а не необходимость набора квадратных скобок в этой позиции. Вы часто будете встречать такую нотацию в Справочнике по библиотеке.)

list.index(x)


Вернуть индекс первого найденного в списке элемента, значение которого равно x. Если элемент не найден, генерируется ошибка.

list.count(x)


Вернуть количество раз, которое x встречается в списке.

list.sort()


Сортировать элементы списка, на месте.

list.reverse()


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

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]


Использование списка в качестве стека


Методы списков позволяют легко использовать список в качестве стека, где последний добавленный элемент становится первым полученным ('первый вошёл - последний вышел'). Чтобы положить элемент на вершину стека, используйте метод append(). Для получения элемента с вершины стека - метод pop() без указания явного индекса. Например:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]


Использование списка в качестве очереди


Вы можете без труда использовать список также и в качестве очереди, где первый добавленный элемент оказывается первым полученным ('первый вошёл - первый вышел'). Чтобы добавить элемент в конец очереди, используйте метод append(), а чтобы получить элемент из начала очереди - метод pop() с нулём в качестве индекса. Например:

>>> queue = ["Eric", "John", "Michael"]
>>> queue.append("Terry") # Прибыл Terry
>>> queue.append("Graham") # Прибыл Graham
>>> queue.pop(0)
'Eric'
>>> queue.pop(0)
'John'
>>> queue
['Michael', 'Terry', 'Graham']


Списковые сборки


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


Любая списковая сборка состоит из выражения, за которым следует оператор for, а затем ноль или более операторов for или if. Результатом станет список, получившийся через вычисление выражения в контексте следующих за ним операторов for и/или if. Если в результате вычисления выражения строится кортеж, его нужно явно обернуть в скобки.


В следующем примере на основе списка чисел создаётся список, где каждое число утроено:

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]


Применим фантазию:

>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]


Здесь мы вызываем метод по очереди с каждым элементом последовательности:

>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']


Используя оператор if, мы можем отфильтровать поток:

>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]


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

>>> [x, x**2 for x in vec] # ошибка - для кортежей необходимы скобки
File "", line 1, in ?
[x, x**2 for x in vec]
^
SyntaxError: invalid syntax
>>> [(x, x**2) for x in vec]
[(2, 4), (4, 16), (6, 36)]


Вот несколько вложенных циклов for и ещё кое-какое забавное поведение:

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]


Списковые сборки могут применяться в сложных выражениях и вложенных функциях:

>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']


Вложенные списковые сборки


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


Представьте нижеследующий пример матрицы 3x3 в виде списка, содержащего три других списка, по одному в ряд:

>>> mat = [
... [1, 2, 3],
... [4, 5, 6],
... [7, 8, 9],
... ]


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

>>> print([[row[i] for row in mat] for i in [0, 1, 2]])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]


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

for i in [0, 1, 2]:
for row in mat:
print(row[i], end="")
print()


В реальных случаях лучше использовать встроенные функции вместо сложных выражений. В нашем случае поможет функция zip():

>>> list(zip(*mat))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]


В разделе Распаковка списков параметров описано предназначение звёздочки в этих строках.



Назад
Вперед




 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь