Вы находитесь на странице: 1из 44

Cписки в Python

1
Что такое массив?

? Как ввести 10000 переменных?

Массив – это группа переменных одного типа,


расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя. Каждая ячейка в массиве имеет
уникальный номер (индекс).
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки

2
! Массив = таблица! НОМЕР
элемента массива
(ИНДЕКС)
A массив
0 1 22 3 4
5 10 15
15 20 25

A[0] A[1] ЗНАЧЕНИЕ


A[2] A[3] A[4]
элемента массива

НОМЕР (ИНДЕКС)
элемента массива: 2

A[2] ЗНАЧЕНИЕ
элемента массива: 15
3
Массивы в Python: списки

A = [1, 3, 4, 23, 5]
A = [1, 3] + [4, 23] + [5]
[1, 3, 4, 23, 5]
A = [0]*10 ? Что будет?
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Создание массива из N элементов:
N = 10
A = [0]*N

4
Заполнение массива

Целыми числами (начиная с 0!):


N = 10 # размер массива
A = [0]*N # выделить память
for i in range(N):
A[i] = i
В краткой форме:
N = 10 # размер массива
A = [ i for i in range(N) ]

? Как заполнить, начиная с 1?

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


5
6
7
Заполнение случайными числами
из библиотеки (модуля)
random
взять функцию randint

from random import randint


N = 10 # размер массива
A = [0]*N # выделить память
for i in range(N):
A[i] = randint(20,100)
В краткой форме:
from random import randint
N = 10
A = [ randint(20,100)
for i in range(N) ]
8
Вывод массива на экран

Как список:
print ( A ) [1, 2, 3, 4, 5]
В строчку через пробел:
for i in range(N):
print ( A[i], end = " " ) 1 2 3 4 5
пробел после
или так: вывода очередного
for x in A: числа
1 2 3 4 5
print ( x, end = "
или " )
так:
print ( *A ) print (1, 2, 3, 4, 5)
разбить список
9 на элементы
Ввод массива с клавиатуры
Создание массива:
N = 10
A = [0]*N
Ввод по одному элементу в строке:
for i in range(N):
A[i] = int( input() )
или кратко:
A = [int(input()) 
for i in range(N)]

10
Ввод массива с клавиатуры
Ввод всех чисел в одной строке:
data = input() # "1 2 3 4 5"
s = data.split() # ["1","2","3","4","5"]
int(x) for x in s ]
A = [ int(x)
# [1,2,3,4,5]
или так:
A = [int(x) for x in input().split()]

11
Как обработать все элементы массива?

Создание массива:
N=5
A = [0]*N
Обработка:
# обработать A[0]
# обработать A[1]
# обработать A[2]
# обработать A[3]
# обработать A[4]

? 1) если N велико (1000, 1000000)?


2) при изменении N программа не должна меняться!
12
Как обработать все элементы массива?
Обработка с переменной: Обработка в цикле:
i=0 i=0
# обработать A[i] while i < N:
i += 1 # обработать A[i]
# обработать A[i] i += 1
i += 1
Цикл с переменной:
# обработать A[i]
i += 1 for i in range(N):
# обработать A[i] # обработать A[i]
i += 1
# обработать A[i]
i += 1

13
Перебор элементов
Общая схема (можно изменять A[i]):
for i in range(N):
... # сделать что-то с A[i]

for i in range(N):
A[i] += 1

Если не нужно изменять A[i]:


for x in A:
... # сделать что-то с x
x = A[0], A[1], ..., A[N-1]
for x in A:
print ( x )
14
Что выведет программа?

A = [2, 3, 1, 4, 6, 5]

print( A[3] ) # 4

print( A[0]+2*A[5] ) # 12

A[1] = A[0] + A[5] # 7


print( 3*A[1]+A[4] ) # 27

A[2] = A[1]*A[4] # 18
print( 2*A[1]+A[2] ) # 24

for k in range(6):
A[k] += 2 # [4,5,3,6,8,7]
print( 2*A[3]+3*A[4] ) # 36
15
Подсчёт нужных элементов
Задача. В массиве записаны данные о росте баскетболистов.
Сколько из них имеет рост больше
180 см, но меньше 190 см?

? Как решать?

count = 0
for x in A:
if 180 < x and x < 190:
count += 1

16
Перебор элементов

Задача. Найти сумму чётных элементов массива.


summa = 0
for x in A:
? Как определить, что
элемент чётный?
if x % 2 == 0:
summa += x
print ( summa )
или так:
B = [x for x in A
if x % 2 == 0]
print ( sum(B) )

сумма массива B

17
Как работает цикл?
summa = 0
for x in A:
if x % 2 == 0:
summa += x

A 4 3 6 8 1

x 1
8
6
3
4
summa 18
10
4
0

18
Среднее арифметическое
Задача. Найти среднее арифметическое элементов массива,
которые оканчиваются на цифру 5.

count = 0
summa = 0
? Как определить, что
оканчивается на 5?
for x in A:
if x % 10 == 5:
count += 1
среднее
summa += x
арифметическое
print ( summa/count )
или так: отбираем нужные
B = [ x for x in A ]
if x % 10 == 5]
print ( sum(B)/len(B) )
19
Поиск в массиве
Найти элемент, равный X:
i=0
while A[i] != X:
i += 1
?Что плохо?

print ( "A[", i, "]=", X, sep = "" )

i=0
while i < N and A[i] != X:
i += 1
if i < N: ? Что если такого нет?
print ( "A[", i, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

20
Поиск в массиве
Вариант с досрочным выходом:
номер найденного
элемента
nX = -1
for i in range ( N ):
if A[i] == X:
nX = i досрочный
break выход из цикла
if nX >= 0:
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

21
Максимальный элемент

M = A[0]
for i in range(1,N):
if A[i] > M:
M = A[i] ?
Если range(N)?
print ( M )
Варианты в стиле Python:
M = A[0]
for x in A:
if x > M: ? Как найти его номер?
M=x
M = max ( A )

23
Максимальный элемент и его номер

M = A[0]; nMax = 0
for i in range(1,N):
if A[i] > M:
M = A[i] ?
Что можно улучшить?
nMax = i
print ( "A[", nMax, "]=", M, sep = "" )

! По номеру элемента можно найти значение!

nMax = 0
for i in range(1,N):
if A[i] > A[nMax]
A[nMax]:
nMax = i
print ( "A[", nMax, "]=", A[nMax]
A[nMax], sep = "" )
24
Максимальный элемент и его номер
Вариант в стиле Python:
M = max(A)
nMax = A.index(M)
print ( "A[", nMax, "]=", M, sep = "" )

номер заданного
элемента (первого из…)

25
26
Массивы в Python

27
Что такое массив?

? Как ввести 10000 переменных?

Массив – это группа переменных одного типа,


расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя. Каждая ячейка в массиве имеет
уникальный номер (индекс).
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки

28
! Массив = таблица! НОМЕР
элемента массива
(ИНДЕКС)
A массив
0 1 22 3 4
5 10 15
15 20 25

A[0] A[1] ЗНАЧЕНИЕ


A[2] A[3] A[4]
элемента массива

НОМЕР (ИНДЕКС)
элемента массива: 2

A[2] ЗНАЧЕНИЕ
элемента массива: 15
29
Создание и заполнение

Перед тем как добавить (создать) новый массив в Python , необходимо


произвести импорт библиотеки, отвечающей за работу с таким
объектом. Для этого потребуется добавить строку from array import * в
файл программы.
from array import *
data = array('i', [2, 5, 4, 0, 8])

Функция array принимает два аргумента, первым из которых становится


тип создаваемого массива, а на месте второго стоит начальный список
его значений. В данном случае i представляет собой целое знаковое
число, занимающее 2 байта памяти. Вместо него можно использовать и
другие примитивы, такие как 1-байтовый символ (c) или 4-байтовое
число с плавающей точкой (f).

30
Добавление элемента
from array import *
data = array('i', [2, 5, 4, 0, 8])
data.insert(4, 3)
Первое (4) отвечает за индекс нового элемента в массиве, то есть
место, куда его следует поместить, а второе (3) представляет собой
само значение.

Удаление элемента
В Python удалить ненужные элементы из массива можно при помощи
метода pop, аргументом которого является индекс ячейки (3).
from array import *
data = array('i', [2, 5, 4, 0, 8])
data.pop(3)

31
Кортежи в Python

32
Кортежем или tuple называется неизменяемый список. Создается он
следующим образом:
A=tuple() # пустой кортеж
B=() #пустой кортеж
C=(12,13) # кортеж из элементов (12, 13)
Кортеж не поддерживает операции добавления, сортировки, вставки,
удаления, расширения. Среди поддерживаемых операций - конкатенация
A=() # пустой кортеж
A=A+(1,) #A=(1,)
В отличие от списка, где новый элемент просто добавляется в конец,
происходит создание нового объекта.
A=() # пустой список
B=A # список B и список A указывают на один и тот же объект

33
Словари в Python

34
Словарь– набор объектов, каждый из которых является
парой вида ключ : значение. Ключи используются для
доступа к значениям элементов словаря так же, как
индексы для доступа к элементам списка.

35
36
Обращение к элементу словаря в Python

Добавление нового элемента в словарь

d1 = {"Russia":"Moscow", "USA":"Washington"}
d1["China"]="Beijing"
print(d1) {'Russia': 'Moscow', 'China': 'Beijing',
'USA': 'Washington'}

37
Для удаления элемента из словаря можно воспользоваться
командой del.

d2 = {"A1":"123", "A2":"456"}
del d2["A1"]
print(d2)
{'A2': '456'}

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

d2 = {"A1":"123", "A2":"456"}
"A1" in d2
True
"A3" in d2
False

38
clear()
Удаляет все элементы словаря.
Методы словарей
d2 = {"A1":"123", "A2":"456"}
print(d2)
{'A2': '456', 'A1': '123'}
d2.clear()
print(d2)
{}

copy()
Создается новая копия словаря.
d2 = {"A1":"123", "A2":"456"}
d3 = d2.copy()
print(d3)
{'A1': '123', 'A2': '456'}
d3["A1"]="789”
print(d2)
{'A2': '456', 'A1': '123‘}
print(d3)
{'A1': '789', 'A2': '456'}

39
get(key)
Возвращает значение из словаря по ключу key.
d = {"A1":"123", "A2":"456«}
d.get("A1")
'123'

items()
Возвращает элементы словаря (ключ, значение) в
отформатированном виде.
d = {"A1":"123", "A2":"456"}
d.items()
dict_items([('A2', '456'), ('A1', '123')])

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

a = {1: "one", 2: "two", 3: "three"}


b = {4: "four", 5: "five"}
a.update(b)
print(a)
{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}

Получение размера
a = {1: "one", 2: "two", 3: "three"}
print(len(a))
3

41
Сортировка
Сортировка осуществляется за счет импортированного модуля operator и
встроенного метода itemgetter, получающего 0 или 1.
import operator
a = {2 : "two", 3 : "three", 1 : "one"}
b = sorted(a.items(), key = operator.itemgetter(0))
print(b)
b = sorted(a.items(), key = operator.itemgetter(1))
print(b)

[(1, 'one'), (2, 'two'), (3, 'three')]


[(1, 'one'), (3, 'three'), (2, 'two')]

Аргумент 0 позволяет отсортировать словарь по ключу, в то время как


1 дает возможность вывести его содержимое в алфавитном порядке
значений.

42
Сравнение

Иногда нужно удостовериться, что два словаря содержат абсолютно


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

a = {1: "one", 2: "two", 3: "three"}


b = {4: "four", 5: "five"}
c = {1: "one", 2: "two", 3: "three"}
print(cmp(a, b))
print(cmp(b, c)) Приведенный код продемонстрировал
print(cmp(a, c)) выполнение метода cmp с трема
1 комбинациями аргументов. Как видно из
-1 результатов выдачи, функция возвращает 1,
0 если первый больше второго, -1, если
наоборот и 0, когда данные полностью
идентичны.

43
Генератор словарей

Как и с другими наборами данных, производить заполнение словарей


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

a = {a: a * a for a in range(5)}


print(a)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Таким образом, на выходе получается словарь a, включающий в себя ровно


5 пар. Ключами являются числа от 0 до 4, а значениями выступают их
математические квадраты.

44
Спасибо за внимание

45

Вам также может понравиться