Skip to content

Commit 374d0f1

Browse files
author
bandy
committed
05
1 parent 351ffee commit 374d0f1

File tree

3 files changed

+340
-17
lines changed

3 files changed

+340
-17
lines changed

Basics_04.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,6 @@ Python позволяет взять или даже составить из э
309309

310310
## Домашка
311311

312-
[Домашнее задание](hw04.md)
312+
[Домашнее задание](hw4.md)
313313

314314
[Python online](https://repl.it/languages/python3)

Basics_05.md

Lines changed: 324 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,325 @@
1-
# 5. Практика
2-
3-
Задачи для работы в аудитории:
4-
5-
1. Ввести число и определить, является ли оно четным. Если четное, вывести "Even", если нечетное - "Odd". Нуль - вывести "Neither!"
6-
2. Ввести три числа, вывести самое большое из них. Если два или три равны, вывести только одно число.
7-
3. Ввести число, вывести сумму его цифр, если она является делителем числа.
8-
4. Дан список целых чисел, вывести его максимум. не использовать встроенных функций поиска максимума.
9-
5. Дан список целых чисел, вывести его сумму, не использовать встроенных функций.
10-
6. Дана строка, развернуть ее со слайсами и без их использования, при помощи циклов.
11-
7. Дана строка, посчитать, сколько раз в ней встретился какой символ, вывести в виде словаря.
12-
8. Создать множества людей (строк с именами и фамилиями). Множество фронтенд программистов, множество бекенд программистов, множество разработчиков системного ПО, мобильного ПО, встроенного ПО. Найти:
13-
- фул стек разработчиков (фронт плюс бек)
14-
- фронтендеров, которые могут и на мобильных
15-
- бекендеров, но не ситемщиков
16-
- системщиков и эмбеддед, но не бекендеров
1+
# 5. Стурктурные типы данных
172

3+
4+
## List (список)
5+
6+
### Создание списков
7+
8+
В python отсутствуют массивы в традиционном понимании этого термина. Вместо них для хранения однородных (и не только) объектов используются списки. Они задаются многими способами:
9+
10+
```python
11+
# пустой список
12+
>>>empty_list = []
13+
# Простое перечисление:
14+
>>> a = [2, 2.25, "Python"]
15+
>>> a
16+
[2, 2.25, 'Python']
17+
18+
# Преобразуем строку в список
19+
>>> b = list("help")
20+
>>> b
21+
['h', 'e', 'l', 'p']
22+
23+
>>> b = 'welcome to the hell'.split()
24+
>>> b
25+
['welcome', 'to', 'the', 'hell']
26+
27+
```
28+
29+
### Операции срезов и вставок со списками
30+
31+
К спискам применимы все те срезы, что применимы к строкам. Более того, в списки таким образом можно еще и добавлять новые элементы.
32+
33+
```python
34+
L = [1, 2, 's']
35+
>>> L
36+
[1, 2, 's']
37+
>>> L[1:3]
38+
[2, 's']
39+
>>> L[2] = '17'
40+
>>> L
41+
[1, 2, '17']
42+
>>> L[1:2]
43+
[2]
44+
>>> L[1:2] = ['new', 'list']
45+
>>> L
46+
[1, 'new', 'list', '17']
47+
```
48+
49+
### Некоторые функции работы со списками
50+
51+
Ниже представлены примеры работы некоторых функций работы со списками:
52+
53+
```python
54+
>>> L = range(1, 11)
55+
>>> L
56+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
57+
>>> L.append(12) # Добавляет элемент в конец списка
58+
>>> L
59+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
60+
>>> L.extend([13, 14]) # Добавляет элементы второго списка в конец первого
61+
>>> L
62+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
63+
>>> L.insert(2, 5) # Вставляет на второе место цифру 5
64+
>>> L
65+
[1, 2, 5, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
66+
>>> L.remove(5) # Удаляет первую встретившуюся пятерку
67+
>>> L
68+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
69+
70+
# функция map применяет переданную ей функцию к списку
71+
>>> L = list(map(str, range(1, 11)))
72+
>>> L # В данном случае мы преобразовали в число все цифры
73+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
74+
>>> S = ': '.join(L) # склеивает строки в списке в одну, вызывается от разделителя
75+
>>> S
76+
'1: 2: 3: 4: 5: 6: 7: 8: 9: 10'
77+
```
78+
79+
## Tuple (кортеж...)
80+
81+
Кортежи (англ. tuple) используется для представления неизменяемой последовательности разнородных объектов. Они обычно записываются в круглых скобках, но если неоднозначности не возникает, то скобки можно опустить.
82+
83+
84+
```python
85+
# Создаем tuple из разнородных элементов
86+
>>> t = (2, 2.05, "Hello")
87+
>>> t
88+
(2, 2.05, 'Hello')
89+
# Присваиваем трем переменным элементы tuple со скобками и без
90+
>>> (a, b, c) = t
91+
>>> print(a, b, c)
92+
2 2.05 Hello
93+
>>> z, y, x = t
94+
>>> print(z, y, x)
95+
2 2.05 Hello
96+
# Создаем tuple из одного элемента
97+
>>> x = 12,
98+
>>> x
99+
(12,)
100+
# Создаем tuple без скобок
101+
>>> tup = 1, 2, 'qwerty'
102+
>>> tup
103+
(1, 2, 'qwerty')
104+
```
105+
106+
К кортежам применимы многие функции из тех, что применимы к спискам: получение длинны кортежа, конкатенация (склеивание) кортежа, срезы, методы index и count:
107+
108+
```python
109+
>>> t = 1, 2, 3
110+
>>> t = t + (4, 5)
111+
>>> t
112+
(1, 2, 3, 4, 5)
113+
>>> t[:-1]
114+
(1, 2, 3, 4)
115+
>>> t[2:-1]
116+
(3, 4)
117+
>>> len(t)
118+
5
119+
>>> t.index(2)
120+
1
121+
>>> t.count(3)
122+
1
123+
```
124+
125+
Как видно из примера, кортеж может быть использован и в левой части оператора присваивания. Значения из кортежа в левой части оператора присваивания связываются с аналогичными элементами правой части. Этот факт как раз и дает нам такие замечательные возможности как массовая инициализация переменных и возврат множества значений из функции одновременно.
126+
127+
Чаще всего кортежи использую для получения данных из функции, хранения каких-то не меняющихся данных и т.п.
128+
Чем привлекательна работа с ними:
129+
130+
- работа с ними быстрее(по сравнению со списками);
131+
- занимают в памяти меньше места;
132+
- могут выступать в качестве ключей для словаря;
133+
- не имеют методов;
134+
- используются для массовой инициализации переменных и возврата сразу нескольких значений из функции;
135+
136+
137+
## Set (Множество)
138+
139+
Сеты — от математического 'множества' - неотсортированная коллекция уникальных элементов. В этом определении упомянуты две основные особенности сетов - **уникальность** и **отсутствие сортировки**.
140+
141+
Уникальность - сет содержит только уникальные элементы, если добавлять в него дубликаты - они не добавляются, если перевести лист в сет - дублирующие элементы будут удалены.
142+
143+
Отсутствие сортировки - элементы в сете находятся в неком хаотичном порядке.
144+
145+
Множества поддерживают перебор всех элементов (итерацию), добавление и удаление элементов, но в силу отсутствия сортировки не пожжерживают индексацию и срезы. Создание множеств:
146+
147+
```python
148+
>>> a = {1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 5, 4, 3}
149+
>>> a
150+
{1, 2, 3, 4, 5, 6}
151+
152+
>>> b = {1, 2, 3, 'a', 'c', 0.34}
153+
>>> b
154+
{0.34, 1, 2, 3, 'a', 'c'}
155+
```
156+
157+
Множества поддерживают некоторые операции:
158+
159+
```python
160+
>>> set1 = {1, 2, 3, 4, 5, 6}
161+
>>> set2 = {5, 6, 7, 8, 9}
162+
>>> set1 - set2 # Разность множеств
163+
{1, 2, 3, 4}
164+
165+
>>> set1 | set2 # Объединение множеств
166+
{1, 2, 3, 4, 5, 6, 7, 8, 9}
167+
168+
>>> set1 & set2 # Пересечение множеств
169+
{5, 6}
170+
```
171+
172+
Добавить элемент в множество можно при помощи функции add, а удалить из множества элемент - при помощи функции remove. В качестве параметра выступает сам элемент, поскольку индексов в множестве нет.
173+
174+
```python
175+
>>> set1.add(7)
176+
>>> set1
177+
{1, 2, 3, 4, 5, 6, 7}
178+
>>> set1.remove(1)
179+
>>> set1
180+
{2, 3, 4, 5, 6, 7, 8}
181+
```
182+
183+
Сеты можно использовать для фильтрации дублей в коллекциях. Для этого коллекцию нужно сконвертировать в сет, а потом обратно:
184+
185+
```python
186+
>>> L = [1, 2, 3, 4, 3, 2, 5, 6, 7, 5, 3, 2]
187+
>>> L
188+
[1, 2, 3, 4, 3, 2, 5, 6, 7, 5, 3, 2]
189+
>>> L = list(set(L))
190+
>>> L
191+
[1, 2, 3, 4, 5, 6, 7]
192+
```
193+
194+
195+
Сеты можно использовать для работы с большими наборами данных:
196+
допустим, у нас имеются базы данных программистов и менеджеров:
197+
198+
```python
199+
>>> programmers = {'ivanov','petrov','sidorov'}
200+
>>> managers = {'ivanov','moxov','goroxov'}
201+
# И программист, и менеджер:
202+
>>> programmers & managers
203+
{'ivanov'}
204+
# Все программисты и менеджеры:
205+
>>> programmers | managers
206+
{'ivanov', 'petrov', 'sidorov', 'goroxov', 'moxov'}
207+
# Программисты, которые не менеджеры:
208+
>>> programmers - managers
209+
{'petrov', 'sidorov'}
210+
```
211+
212+
## Dict (Словарь)
213+
214+
Словарь (хэш, ассоциативный массив) – **изменяемая и неупорядоченная** структура данных, предназначенная для хранения элементов вида **ключ: значение**.
215+
216+
Значением элемента словаря может быть любой тип данных, ключем элемента - любой неизменяемый (immutable) тип данных, т.е. str, int, float, tuple и пр.
217+
218+
### Создание словаря
219+
220+
Есть несколько способов создать словарь: Прямое создание, создание при помощи преобразования в тип (используя функцию dict), использую функцию fromkeys и через генератор словарей :)
221+
222+
Рассмотрим все эти способы на примере:
223+
224+
```python
225+
>>> d = {} # Создание пустого словаря напрямую
226+
>>> d
227+
{}
228+
>>> d1 = {'a':1, 'b': 2} # Создание словаря напрямую
229+
>>> d1
230+
{'a': 1, 'b': 2}
231+
232+
# создание словаря при помощи функции dict:
233+
>>> d = dict(short='dict', long='dictionary')
234+
>>> d
235+
{'short': 'dict', 'long': 'dictionary'}
236+
>>> d = dict([(1, 1), (2, 4)])
237+
>>> d
238+
{1: 1, 2: 4}
239+
240+
# создание словаря при помощи функции fromkeys:
241+
d = dict.fromkeys(['a', 'b', 1, (1, 2)])
242+
>>> d
243+
{'a': None, 1: None, 'b': None, (1, 2): None}
244+
# с заполнением одним значением
245+
>>> d = dict.fromkeys(['a', 'b', 1, (1, 2)], 4)
246+
>>> d
247+
{'a': 4, 1: 4, 'b': 4, (1, 2): 4}
248+
```
249+
250+
251+
У функции dict есть одна особенность, с ее помощью можно быстро создавать словари с ключами-строками, опуская кавычки. Это показано в примере ниже. К сожалению, работает только с явными строками, принцип формирования которых такой же, как и принцип наименования переменных:
252+
253+
```python
254+
>>> dict(a=1, b=2, c=3, d=13)
255+
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
256+
>>> dict(a=1, b=2, c=3, d=13, 1=2)
257+
File "<stdin>", line 1
258+
SyntaxError: keyword can't be an expression
259+
>>> dict(a=1, b=2, c=3, d=13, '1'=2)
260+
File "<stdin>", line 1
261+
SyntaxError: keyword can't be an expression
262+
```
263+
264+
### Операции со словарями
265+
266+
Со словарями доступны операции взятия элемента, удаления элемента, добавления элемента и его обновления:
267+
268+
```python
269+
>>> d = dict(a=1, b=2, c=3, d=13)
270+
>>> d
271+
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
272+
>>> d['a']
273+
1
274+
>>> d[1] = 15
275+
>>> d
276+
{'a': 1, 1: 15, 'c': 3, 'b': 2, 'd': 13}
277+
>>> del d[1]
278+
>>> d
279+
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
280+
>>> d['a'] = 111
281+
>>> d['a']
282+
111
283+
```
284+
Взятие элемента из словаря по ключу лучше осуществлять не через квадратные скобки, а при помощи метода .get(). Если элемент отсутствует, обычное взятие по ключу выдаст ошибку, а метод .get() позволяет вам этого избежать:
285+
286+
```python
287+
>>> d['a']
288+
1
289+
>>> d['e']
290+
Traceback (most recent call last):
291+
File "<stdin>", line 1, in <module>
292+
KeyError: 'e'
293+
>>> d.get('e')
294+
>>>
295+
>>> d.get('e', 'No such element')
296+
'No such element'
297+
>>>
298+
```
299+
300+
### Методы и функции для работы со словарями
301+
302+
```python
303+
#Добавление элементов из другого словаря
304+
>>> d
305+
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
306+
>>> d.update({'4': 4, '5': 5})
307+
>>> d
308+
{'a': 1, 'c': 3, 'b': 2, '5': 5, 'd': 13, '4': 4}
309+
310+
#Количество пар в словаре
311+
>>> len(d)
312+
6
313+
314+
>>> d.keys() # Получить список ключей
315+
['a', 'c', 'b', '5', 'd', '4']
316+
>>> d.values() # Получить список значений
317+
[1, 3, 2, 5, 13, 4]
318+
>>> d.items() # Получить список элементов - кортежей
319+
dict_items([('a', 1), ('c', 3), ('b', 2), ('d', 13), ('4', 4), ('5', 5)])
320+
```
321+
322+
323+
## Домашка
324+
325+
[Домашнее задание](hw5.md)

hw5.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Домашнее задание 5
2+
3+
Данное домашнее задание во многом повторяет третье домашнее задание, но теперь вы знакомы с типами данных уже лучше и ближе. Все ваши задумки на тему выбранных структур по третьей домашке попробуйте реализовать в коде и обосновать.
4+
5+
**Уровень 1.**
6+
1. Коллекцию фильмов о Джеймсе Бонде.
7+
2. Табель с оценками.
8+
3. Папки на жестком диске компьютера.
9+
**Уровень 2.**
10+
4. Парковочные места.
11+
5. Координаты посещенных вами мест.
12+
6. Места в театре.
13+
7. Генеалогическое древо.
14+
**Уровень 3.**
15+
Подготовьтесь к шестому уроку: повторите информацию о циклах, почитайте о том, как применять циклы ко всем структурным типам данных, задайте вопросы.

0 commit comments

Comments
 (0)