|
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. Стурктурные типы данных |
17 | 2 |
|
| 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) |
0 commit comments