InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Глава 5. Добавления и окончания


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


5.1 Дополнительно о списках


Списковый тип данных имеет несколько методов. Все они приведены ниже:

insert (i, x)
вставляет элемент в заданную позицию. Первый аргумент - индекс элемента, перед которым производится вставка, так, a.insert(0,x) вставит в начало списка, а a.insert(len(a),x) эквивалентно a.append(x).
append (x)
эквивалентно записи a.insert(len(a),x).
index (x)
возвращает индекс первого элемента списка, значение которого равно x . Если такого элемента нету, то возникнет ошибка.
remove (x)
удаляет из списка первый элемент, равный x . В случае его отсутствия также возникнет ошибка.
sort ()
сортирует элементы списка.
reverse ()
записывает элементы списка в обратном порядке.
count (x)
возвращает количество элементов списка, равных x .

Вот пример, использующий все методы списка:

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

5.2 Оператор del


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

>>> a
[-1, 1, 66.6, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.6, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.6, 1234.5]
>>>
del можно еще использовать для удаления целой переменной:
>>> del a
>>>

Теперь ссылка на имя a приведет к ошибке (по крайней мере, пока ему не присвоим нового значения). Мы еще найдем применение для del позднее.


5.3 Тьюплы и последовательности


Мы видели, что списки и строки имеют много общих свойств, например, индексирование и кусочные операции. Они оба являются примерами последовательного типа данных. Поскольку Python - развивающийся язык, то могут быть добавлены другие последовательные типы данных. Существует также еще другой стандартный последовательный тип: тьюпл (tuple).

Тьюпл состоит из числовых значений, разделенных запятыми, например:

>>> t=12345, 54321, ‘hello!’
>>> t[0]
12345
>>> t
(12345, 54321, ‘hello!’)
>>> # Тьюплы могут быть вложенными:
... u=t,(1, 2, 3, 4, 5)
>>> u
((12345, 54321, ‘hello!’), (1, 2, 3, 4, 5))
>>>

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

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

Некоторую проблему могло бы представить создание тьюпла с 0 или 1 элементом, для этих случаев синтаксис имеет дополнительные особенности. Пустой тьюпл создается в виде пустой пары скобок; тьюпл с одним элементом - путем записи запятой после этого единственного элемента (не достаточно просто заключить значение в скобки). Некрасиво, но эффективно. Пример:

>>> empty=()
>>> singleton=’hello’, # <-- в конце стоит запятая
>>> len(empty)
0
>>> len(singlton)
1
>>> singleton
(‘hello’, )
>>>

Выражение t=12345, 54321, ‘hello!’ - пример упаковки тьюпла: значения 12345 , 54321 и ‘hello!’ пакуются вместе в одном тьюпле. Также возможна и обратная операция:

>>> x,y,z=t
>>>

И это достаточно подходяще называется распаковкой тьюпла. Распаковка тьюпла требует, чтобы список переменных в левой части имел такое же количество элементов, что и тьюпл. Примечание: составное присваивание - это просто комбинация упаковки и распаковки тьюплов!

Иногда полезна соответствующая операция для списков: распаковка списков. Это обеспечивается заключением в квадратные скобки списка переменных:

>>> a=[‘spam’, ‘eggs’, 100, 1234]
>>> [a1, a2, a3, a4]=a
>>>

5.4 Словари


Словари (dictionary) - еще один полезный тип данных, встроенный в Python. Они имеются и в некоторых других языках под названием "ассоциированная память" или "ассоциированные массивы". В отличие от последовательностей, которые индексируются рядом чисел, словари применяют индексацию ключами, которые являются строками (поддерживается и использование не строковых значений в качестве ключей, но описание этого выходит за рамки данного семинара). Лучше всего думать о словаре как о несортированном множестве пар ключ : значение, с требованием, что ключи оригинальны (в пределах одного словаря). Пара фигурных скобок создает пустой словарь: {} . Размещение пар ключ : значение, разделенных запятыми, внутри скобок добавляет к словарю начальные пары ключей со значениями; в таком же виде словари посылаются на вывод.

Главной функцией словаря является хранение значения с некоторым ключом и извлечение значения с заданным ключом. Можно удалить пару ключ : значение посредством оператора del . Если Вы присваиваете, используя существующий ключ, то старое значение, ассоциированное с этим ключом, теряется. Попытка получения значения с несуществующим ключом вызовет ошибку.

Метод keys() словарного объекта возвращает список всех используемых в словаре ключей, в случайном порядке (если Вы хотите их отсортировать, просто примените метод sort() к списку ключей). Для проверки наличия некоторого ключа в словаре, используйте метод has_key().

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

>>> tel={‘jack’:4098, ‘sape’:4139}
>>> tel[‘guido’]=4127
>>> tel
{‘sape’:4139, ‘guido’:4127, ‘jack’:4098}
>>> tel[‘jack’]
4098
>>> del tel[‘sape’]
>>> tel[‘irv’]=4127
>>> tel
{‘guido’:4127, ‘irv’:4127, ‘jack’:4098}
>>> tel.keys()
[‘guido’, ‘irv’, ‘jack’]
>>> tel.has_key(‘guido’)
1
>>>

5.5 Дополнительно об условиях


Условия, которые мы использовали выше в операторах while и if , могут включать и другие операции помимо сравнения.

Операции in и not in проверяют встречается ли (отсутствует ли) некоторое значение в последовательном типе. Операции is и is not проверяют являются ли два объекта, в действительности, одним и тем же объектом; это имеет значение только для мутируемых объектов, как списки. Все операции сравнения имеют один и тот же приоритет, который ниже чем у числовых операций.

Сравнение можно записать в виде цепочки: например, a < b == c проверяет меньше ли a чем b и, более того, b равен ли c .

Сравнения могут быть комбинированы с использованием логических операций and и or , и результат сравнения (или любого другого логического выражения) можно инвертировать с помощью not . Все они имеют более низкий приоритет чем операции сравнения; а между собой, not имеет наивысший приоритет, и or - низший, так, что A and not B or C эквивалентно (A and (not B)) or C . Конечно, используя скобки можно определить необходимый порядок вычисления выражения.

Логические операции and и or - это так называемые укороченные операции: их аргументы обрабатываются слева направо, и обработка прекращается сразу, как только результат станет известен. Например, если A и C равны "истине", а B - "ложь", то A and B and C не станет и смотреть на C 9 . В общем случае, возвращаемое значение укороченной операции, когда оно используется как общее значение, а не как логическое, равно последнему обработанному аргументу.

Результат сравнения или другого логического выражения можно присвоить переменной. Например:

>>> string1, string2, string3 = ‘’, ‘Trondheim’, ‘Hammer Dance’
>>> non_null = string1 or string2 or string3
>>> non_null
‘Trondheim’
>>>

Примечание: в Python, в отличие от С, присваивание не может встречаться внутри выражений.


5.6 Сравнение последовательностей и других типов


Объекты последовательного типа можно сравнивать с другими объектами такого же последовательного типа. Сравнение использует лексикографический порядок: сперва сравниваются первые два элемента, и если они различны, то определяется результат сравнения; если же они равны, то сравниваются следующие два элемента, и так далее пока одно из последовательностей не исчерпается. Если сравниваемые элементы сами являются последовательностями одинакового типа, то лексикографическое сравнение продолжается рекурсивно.

Если все элементы двух последовательностей равны, то сами последовательности считаются равными. Если одна последовательность является начальной подпоследовательностью другой, то та, которая короче, считается меньшей. Лексикографический порядок для строк использует ASCII порядок индивидуальных символов. Вот несколько примеров сравнения последовательностей одинакового типа:

(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
‘ABC’ < ‘C’ < ‘Pascal’ < ‘Python’
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)              = (1.0, 2.0, 3.0)
(1, 2, (‘aa’, ‘ab’))   < (1, 2, (‘abc’, ‘a’), 4)

Примечание: сравнение объектов разных типов также легально. Результат определяется, но он произвольный: типы упорядочены по их именам. Так, списки (lists) всегда меньше чем строки (strings), а строки меньше чем тьюплы (tuples), и т. д.

Смешанные числовые типы сравниваются согласно их значений, так, 0 равен 0.0, и т. д. 10

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua