Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛЕКЦИЯ 2

.pdf
Скачиваний:
13
Добавлен:
26.03.2016
Размер:
1.15 Mб
Скачать

5.2.Методы, специфичные для типа

Списки в языке Python являются аналогом массивов в других языках программирования, но они обладают более широкими возможностями.

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

L = [123, ‘spam’, 1.23]

L.append(‘NI’) # Увеличение: в конец списка добавляется новый объект

L.pop(2) # Уменьшение: удаляется элемент из середины списка

M = [‘bb’, ‘aa’, ‘cc’]

M.sort() # Упорядочивает элементы списка по возрастанию

M.reverse() # Упорядочивает элементы списка по убыванию

5.3.Проверка выхода за границы

Хотя списки не имеют фиксированного размера, язык Python, тем не менее, не допускает возможности обращаться к несуществующим элементам списка:

>>>L=[123, ‘spam’, ‘NI’]

>>> L[99]

... IndexError: list index out of range

>>> L[99] = 1

... IndexError: list assignment index out of range

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

L = [123, ‘spam’, 1.23]

L.append(‘NI’) # Увеличение: в конец списка добавляется новый объект

L.pop(2) # Уменьшение: удаляется элемент из середины списка

M = [‘bb’, ‘aa’, ‘cc’]

M.sort() # Упорядочивает элементы списка по возрастанию

M.reverse() # Упорядочивает элементы списка по убыванию

5.4.Вложенные списки

Одна из замечательных особенностей базовых типов языка Python состоит в том, что они поддерживают возможность создания вложенных конструкций произвольной глубины и в любых комбинациях (например, можно создать список, содержащий словарь, который содержит другой список, и так далее). Одно из очевидных применений этой особенности – представление матриц, или «многомерных массивов» в языке Python. Делается это с помощью списка, содержащего вложенные списки:

>>>M = [[1, 2, 3], # Матрица 3 x 3 в виде вложенных списков [4, 5, 6], # Выражение в квадратных скобках может [7, 8, 9]] # занимать несколько строк

>>>M

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] Обращаться к такой структуре можно разными способами:

>>>M[1] # Получить строку 2 [4, 5, 6]

>>>M[1][2] # Получить строку 2, а затем элемент 3 в этой строке

6

5.5.Генераторы списков

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

res = [x for x in range(1,25,2)] print(res)

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]

______________________________________________

res = [x for x in range(1,25,2)] print(res)

[1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529]

______________________________________________

M = [[1, 2, 3], # Матрица 3 x 3 в виде вложенных списков [4, 5, 6], # Выражение в квадратных скобках может

[7, 8, 9]] print(M)

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] col2 = [row[1] for row in M] print(col2)

[2, 5, 8]

6.Словари

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

6.1.Операции над отображениями

>>> D = {‘food’: ‘Spam’, ‘quantity’: 4, ‘color’: ‘pink’}

 

>>> D[‘food’] # Получить значение, связанное с ключом ‘food’

>>> D = {}

‘Spam’

>>> D[‘name’] = ‘Bob’ # В результате присваивания создается ключ

>>> D[‘quantity’] += 1 # Прибавить 1 к значению ключа

>>> D[‘job’] = ‘dev’

‘quantity’

>>> D[‘age’] = 40

>>> D

>>> D{‘age’: 40, ‘job’: ‘dev’, ‘name’: ‘Bob’}

{‘food’: ‘Spam’, ‘color’: ‘pink’, ‘quantity’: 5}

>>> print(D[‘name’])

 

 

Bob

6.2.Вложенный словарь

>>>rec = {‘name’: {‘first’: ‘Bob’, ‘last’: ‘Smith’}, ‘job’: [‘dev’, ‘mgr’], ‘age’: 40.5}

>>>rec[‘name’] # ‘Name’ – это вложенный словарь

{‘last’: ‘Smith’, ‘first’: ‘Bob’}

>>> rec[‘name’][‘last’] # Обращение к элементу вложенного словаря ‘Smith’

>>>rec[‘job’] # ‘Job’ – это вложенный список [‘dev’, ‘mgr’]

>>>rec[‘job’][-1] # Обращение к элементу вложенного списка ‘mgr’

>>>rec[‘job’].append(‘janitor’) # Расширение списка должностей Боба (Bob)

>>>rec{‘age’: 40.5, ‘job’: [‘dev’, ‘mgr’, ‘janitor’], ‘name’: {‘last’: ‘Smith’, ‘first’: ‘Bob’}}

Возможность вложения позволяет легко воспроизводить достаточно сложные структуры данных. Для создания подобной структуры на языке C потребовалось бы приложить больше усилий и написать больше программного кода: нам пришлось бы описать и объявить структуры и массивы, заполнить их значениями, связать их между собой и так далее. В языке Python все это делается автоматически – запуск выражения приводит к созданию всей структуры вложенных объектов.

7.Кортежи

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

>>>T = (1, 2, 3, 4) # Кортеж из 4 элементов

>>>len(T) # Длина

4

>> T + (5, 6) # Конкатенация (1, 2, 3, 4, 5, 6)

>>>T[0] # Извлечение элемента, среза и так далее

1

>>>T[0] = 2 # Кортежи являются неизменяемыми

...TypeError: ‘tuple’ object does not support item assignment

>>>T.index(4) # Определение индексӑ: значение 4 находится в позиции 3

3

>>>T.count(4) # Значение 4 присутствует в единственном экземпляре 1

8.Файлы

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

>>>f = open(‘data.txt’, ‘w’) # Создается новый файл для вывода

>>>f.write(‘Hello\n’) # Запись строки байтов в файл

6

>>>f.write(‘world\n’) # В Python 3.0 возвращает количество записанных байтов

6

>>>f.close() # Закрывает файл и выталкивает выходные буферы на диск

>>>f = open('data.txt') # ‘r’ – это режим доступа к файлу по умолчанию

>>>text = f.read() # Файл читается целиком в строку

>>>text

Hello world

>>> text.split() # Содержимое файла всегда является строкой [‘Hello’, ‘world’]

9.Другие базовые типы

Множества – это неупорядоченные коллекции уникальных и неизменяемых объектов.

>>>X = set(‘spam’) # Можно создавать из последовательностей

>>>Y = {‘h’, ‘a’, ‘m’} # Можно определять литералы множеств

>>>X, Y({‘a’, ‘p’, ‘s’, ‘m’}, {‘a’, ‘h’, ‘m’})

>>>X & Y # Пересечение

{‘a’, ‘m’}

>>>X | Y# Объединение {‘a’, ‘p’, ‘s’, ‘h’, ‘m’}

>>>X – Y # Разность

{‘p’, ‘s’}

>>> {x ** 2 for x in [1, 2, 3, 4]} # Генератор множеств в 3.0 {16, 1, 4, 9}

Для решения проблем, связанных с точностью представления простых вещественных чисел введены

вещественные числа с фиксированной точностью и рациональные числа (числа, представленные дробью, то есть парой целых чисел – числителем и знаменателем).

print(1.1/3)

0.66666666666667

from decimal import Decimal from decimal import getcontext getcontext().prec = 2 print(Decimal('1.10') / 3)

0.67

print(7/71) print(7/71*71 == 7) False

from fractions import Fraction print(Fraction(7, 71) * 71 == 7) True

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]