Множества (set)
Содержание:
- Removing elements from a set
- Задания для самоподготовки
- Set Operations in Python
- Простая функция
- Методы добавления/удаления элементов в множестве
- List comprehensions (генераторы списков)¶
- Удаление элемента из множеств
- Деление с остатком
- Dict comprehensions (генераторы словарей)¶
- Кортежи
- Практическая работа по использованию словарей
- Свойства множеств
Removing elements from a set
A particular item can be removed from a set using the methods and .
The only difference between the two is that the function leaves a set unchanged if the element is not present in the set. On the other hand, the function will raise an error in such a condition (if element is not present in the set).
The following example will illustrate this.
Output
{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2
Similarly, we can remove and return an item using the method.
Since set is an unordered data type, there is no way of determining which item will be popped. It is completely arbitrary.
We can also remove all the items from a set using the method.
Output
{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()
Задания для самоподготовки
1. Написать
программу корректности ввода телефонного номера по шаблону:
x(xxx)xxxxxx
где x – любая цифра от
0 до 9. Данные представлены в виде строки.
2. Написать
программу изменения строки
«2+3+6.7 +
82 + 5.7 +1»
на строку, в
которой все «+» заменены на «-» и удалены все пробелы
3. Написать
программу вывода чисел 0; -100; 5.6; -3 в виде столбца:
0 -100 5.6 -3
в котором все
строки выровнены по правому краю (подсказка: воспользуйтесь методом rjust).
4. В строке «abrakadabra» найдите все
индексы подстроки «ra» и выведите их (индексы) в консоль.
Видео по теме
Python 3 #1: установка и запуск интерпретатора языка
Python 3 #2: переменные, оператор присваивания, типы данных
Python 3 #3: функции input и print ввода/вывода
Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень
Python 3 #5: условный оператор if, составные условия с and, or, not
Python 3 #6: операторы циклов while и for, операторы break и continue
Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in
Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие
Python 3 #9: списки list и функции len, min, max, sum, sorted
Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear
Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора
Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop
Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index
Python 3 #14: функции (def) — объявление и вызов
Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»
Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов
Python 3 #17: алгоритм Евклида, принцип тестирования программ
Python 3 #18: области видимости переменных — global, nonlocal
Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение
Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield
Python 3 #21: функции map, filter, zip
Python 3 #22: сортировка sort() и sorted(), сортировка по ключам
Python 3 #23: обработка исключений: try, except, finally, else
Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle
Python 3 #25: форматирование строк: метод format и F-строки
Python 3 #26: создание и импорт модулей — import, from, as, dir, reload
Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)
Python 3 #28: декораторы функций и замыкания
Python 3 #29: установка и порядок работы в PyCharm
Python 3 #30: функция enumerate, примеры использования
Set Operations in Python
Sets are used to carry out mathematical functionality set operations such as union, difference, intersection, and symmetric difference.
Set Union – Inclusion of all elements from both the sets.
Union operation is performed by either of the following methods:
- By using operator
- By using method
Example: Union of Sets
X = {1, 2, 3} Y = {6, 7, 8} print(X | Y) print(Y.union(X))
Output:
{1, 2, 3, 6, 7, 8} {1, 2, 3, 6, 7, 8}
Set Intersection – Inclusion of elements that are common to both the sets.
Intersection operation is performed by either of the following methods:
- By using operator
- By using ) method
Example: Intersection of Sets
X = {1, 2, 3} Y = {3, 2, 8} print(X & Y) print(Y.intersection(X))
Output:
{2, 3} {2, 3}
Set Difference – Inclusion of elements from either of the sets.
(A – B) contains the elements that are only in set A but not in set B.
(B – A) contains the elements that are only in set B but not in set A.
Difference operation is performed by either of the following methods:
- By using operator
- By using method
Example: Difference of Sets
X = {1, 2, 3} Y = {3, 2, 8} print(X - Y) print(Y.difference(X))
Output:
{1} {8}
Symmetric Difference operation is performed by either of the following methods:
- By using operator
- By using method
Example: Symmetric Difference of Sets
X = {1, 2, 3, 9, 0} Y = {3, 2, 8, 7, 5} print(X ^ Y) print(Y.symmetric_difference(X))
Output:
{0, 1, 5, 7, 8, 9} {0, 1, 5, 7, 8, 9}
Простая функция
Python Функция это блок кода, который начинается с ключевого слова def, с дальнейшим названием функции. Функция может принимать от нуля и более аргументов, ключевые аргументы или сочетание этих аргументов. Функция всегда выдает результат. Если вы не определили, что именно она должна выдавать, она выдаст None. Вот очень простой пример функции, которая выдает строку:
Python
# -*- coding: utf-8 -*-
def a_function():
«»»Обычная функция»»»
return «1+1»
if __name__ == «__main__»:
value = a_function()
print(value)
1 2 3 4 5 6 7 8 |
# -*- coding: utf-8 -*- defa_function() «»»Обычная функция»»» return»1+1″ if__name__==»__main__» value=a_function() print(value) |
Все что мы сделали в этом коде, это вызвали функцию и указали значение выдачи. Давайте создадим другую функцию:
Python
# -*- coding: utf-8 -*-
def another_function(func):
«»»
Функция которая принимает другую функцию.
«»»
def other_func():
val = «Результат от %s это %s» % (func(),
eval(func())
)
return val
return other_func
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# -*- coding: utf-8 -*- defanother_function(func) «»» Функция которая принимает другую функцию. defother_func() val=»Результат от %s это %s»%(func(), eval(func()) returnval returnother_func |
Эта функция принимает один аргумент и этот аргумент должен быть функцией или вызываемой. По факту, ее стоит вызывать, используя определенную в прошлом функцию. Вы заметите, что это функция содержит вложенную внутрь функцию, которую мы называем other_func. Она принимает результат переданной функции, её выражение и создает строку, которая говорит нам о том, что мы сделали, после чего она возвращается.
Давайте взглянем на полную версию данного кода:
Python
# -*- coding: utf-8 -*-
def another_function(func):
«»»
Функция которая принимает другую функцию.
«»»
def other_func():
val = «Результат от %s это %s» % (func(),
eval(func())
)
return val
return other_func
def a_function():
«»»Обычная функция»»»
return «1+1»
if __name__ == «__main__»:
value = a_function()
print(value)
decorator = another_function(a_function)
print(decorator())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# -*- coding: utf-8 -*- defanother_function(func) «»» Функция которая принимает другую функцию. defother_func() val=»Результат от %s это %s»%(func(), eval(func()) returnval returnother_func defa_function() «»»Обычная функция»»» return»1+1″ if__name__==»__main__» value=a_function() print(value) decorator=another_function(a_function) print(decorator()) |
Так и работает декоратор. Мы создали одну функцию и передали её другой второй функции. Вторая функция является функцией декоратора. Декоратор модифицирует или усиливает функцию, которая была передана и возвращает модификацию. Если вы запустите этот код, вы увидите следующий выход в stdout:
Python
1+1
Результат от 1+1 это 2
1 2 |
1+1 Результат от 1+1 это 2 |
Давайте немного изменим код, чтобы превратить another_function в декоратор:
Python
# -*- coding: utf-8 -*-
def another_function(func):
«»»
Функция которая принимает другую функцию.
«»»
def other_func():
val = «Результат от %s это %s» % (func(),
eval(func())
)
return val
return other_func
@another_function
def a_function():
«»»Обычная функция»»»
return «1+1»
if __name__ == «__main__»:
value = a_function()
print(value)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# -*- coding: utf-8 -*- defanother_function(func) «»» Функция которая принимает другую функцию. defother_func() val=»Результат от %s это %s»%(func(), eval(func()) returnval returnother_func @another_function defa_function() «»»Обычная функция»»» return»1+1″ if__name__==»__main__» value=a_function() print(value) |
Обратите внимание на то, что декоратор начинается с символа @, за которым следует название функции, которую мы собираемся «декорировать». Для получения декоратора python, вам нужно только разместить его в строке перед определением функции. Теперь, когда мы вызываем **a_function, она будет декорирована, и мы получим следующий результат:
Теперь, когда мы вызываем **a_function, она будет декорирована, и мы получим следующий результат:
Python
Результат от 1+1 это 2
1 | Результатот1+1это2 |
Давайте создадим декоратор, который будет делать что-нибудь полезное.
Методы добавления/удаления элементов в множестве
Для добавления
элемента в множество используется метод add:
b.add(7)
И, так как
множества – это изменяемый тип данных, то этот метод сразу добавит этот
элемент, если такого еще нет. То есть, если мы попробуем добавить 7 еще раз:
b.add(7)
то множество не
изменится.
Если необходимо
в множество добавить сразу несколько значений, то для этого можно
воспользоваться методом update:
b.update("a", "b", (1,2))
В качестве
аргумента мы должны указать итерируемый объект, например, список, значения
которого и будут добавлены в множество, разумеется, с проверкой их
уникальности. Или, так:
b.update("abrakadabra")
Строка – это
тоже итерируемый объект, и ее уникальные символы будут добавлены в множество. И
так далее, в качестве аргумента метода update можно указывать
любой перебираемый объект.
Для удаления
элемента по значению используется метод discard:
b.discard(2)
Если еще раз
попытаться удалить двойку:
b.discard(2)
то ничего не
произойдет и множество не изменится.
Другой метод для
удаления элемента по значению – remove:
b.remove(4)
но при повторном
таком вызове:
b.remove(4)
возникнет
ошибка, т.к. значение 4 в множестве уже нет. То есть, данный метод возвращает
ошибку при попытке удаления несуществующего значения. Это единственное отличие
в работе этих двух методов.
Также удалять
элементы можно и с помощью метода pop:
b.pop()
При этом он
возвращает удаляемое значение, а сам удаляемый элемент оказывается, в общем-то,
случайным, т.к. множество – это неупорядоченный список. Если вызвать этот метод
для пустого множества, то возникнет ошибка:
c=set() c.pop()
Наконец, если
нужно просто удалить все элементы из множества, то используется метод:
b.clear()
На следующем занятии мы продолжим рассматривать множества и поговорим об операциях над них, а также о возможности их сравнения.
Видео по теме
Python 3 #1: установка и запуск интерпретатора языка
Python 3 #2: переменные, оператор присваивания, типы данных
Python 3 #3: функции input и print ввода/вывода
Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень
Python 3 #5: условный оператор if, составные условия с and, or, not
Python 3 #6: операторы циклов while и for, операторы break и continue
Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in
Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие
Python 3 #9: списки list и функции len, min, max, sum, sorted
Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear
Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора
Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop
Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index
Python 3 #14: функции (def) — объявление и вызов
Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»
Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов
Python 3 #17: алгоритм Евклида, принцип тестирования программ
Python 3 #18: области видимости переменных — global, nonlocal
Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение
Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield
Python 3 #21: функции map, filter, zip
Python 3 #22: сортировка sort() и sorted(), сортировка по ключам
Python 3 #23: обработка исключений: try, except, finally, else
Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle
Python 3 #25: форматирование строк: метод format и F-строки
Python 3 #26: создание и импорт модулей — import, from, as, dir, reload
Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)
Python 3 #28: декораторы функций и замыкания
Python 3 #29: установка и порядок работы в PyCharm
Python 3 #30: функция enumerate, примеры использования
List comprehensions (генераторы списков)¶
Генератор списка — это выражение вида:
In 1]: vlans = f'vlan {num}' for num in range(10,16)] In 2]: print(vlans) 'vlan 10', 'vlan 11', 'vlan 12', 'vlan 13', 'vlan 14', 'vlan 15'
В общем случае, это выражение, которое преобразует итерируемый объект в
список. То есть, последовательность элементов преобразуется и
добавляется в новый список.
Выражению выше аналогичен такой цикл:
In 3]: vlans = [] In 4]: for num in range(10,16): ... vlans.append(f'vlan {num}') ... In 5]: print(vlans) 'vlan 10', 'vlan 11', 'vlan 12', 'vlan 13', 'vlan 14', 'vlan 15'
В list comprehensions можно использовать выражение if. Таким образом
можно добавлять в список только некоторые объекты.
Например, такой цикл отбирает те элементы, которые являются числами,
конвертирует их и добавляет в итоговый список only_digits:
In 6]: items = '10', '20', 'a', '30', 'b', '40' In 7]: only_digits = [] In 8]: for item in items ... if item.isdigit(): ... only_digits.append(int(item)) ... In 9]: print(only_digits) 10, 20, 30, 40
Аналогичный вариант в виде list comprehensions:
In 10]: items = '10', '20', 'a', '30', 'b', '40' In 11]: only_digits = int(item) for item in items if item.isdigit()] In 12]: print(only_digits) 10, 20, 30, 40
Конечно, далеко не все циклы можно переписать как генератор списка, но
когда это можно сделать, и при этом выражение не усложняется, лучше
использовать генераторы списка.
Примечание
В Python генераторы списка могут также заменить функции filter и map
и считаются более понятными вариантами решения.
С помощью генератора списка также удобно получать элементы из вложенных
словарей:
In 13]: london_co = { ... 'r1' { ... 'hostname' 'london_r1', ... 'location' '21 New Globe Walk', ... 'vendor' 'Cisco', ... 'model' '4451', ... 'IOS' '15.4', ... 'IP' '10.255.0.1' ... }, ... 'r2' { ... 'hostname' 'london_r2', ... 'location' '21 New Globe Walk', ... 'vendor' 'Cisco', ... 'model' '4451', ... 'IOS' '15.4', ... 'IP' '10.255.0.2' ... }, ... 'sw1' { ... 'hostname' 'london_sw1', ... 'location' '21 New Globe Walk', ... 'vendor' 'Cisco', ... 'model' '3850', ... 'IOS' '3.6.XE', ... 'IP' '10.255.0.101' ... } ... } In 14]: london_codevice]: '15.4', '15.4', '3.6.XE' In 15]: london_codevice]: '10.255.0.1', '10.255.0.2', '10.255.0.101'
На самом деле, синтаксис генератора списка выглядит так:
expression for item1 in iterable1 if condition1 for item2 in iterable2 if condition2 ... for itemN in iterableN if conditionN
Это значит, можно использовать несколько for в выражении.
Например, в списке vlans находятся несколько вложенных списков с
VLAN’ами:
In 16]: vlans = , 101, 115, 150], 111, 40, 50]]
Из этого списка надо сформировать один плоский список с номерами VLAN.
Первый вариант — с помощью циклов for:
In 17]: result = [] In 18]: for vlan_list in vlans ... for vlan in vlan_list ... result.append(vlan) ... In 19]: print(result) 10, 21, 35, 101, 115, 150, 111, 40, 50
Аналогичный вариант с генератором списков:
In 20]: vlans = , 101, 115, 150], 111, 40, 50]] In 21]: result = vlan for vlan_list in vlans for vlan in vlan_list In 22]: print(result) 10, 21, 35, 101, 115, 150, 111, 40, 50
Можно одновременно проходиться по двум последовательностям, используя
zip:
Удаление элемента из множеств
Python позволяет нам удалять элемент из множества, но не используя индекс, так как множество элементов не индексированы. Элементы могут быть удалены при помощи обоих методов и .
Помните, что метод не будет выдавать ошибку, если элемент не был найден во множестве. Однако, если метод используется и элемент не был найден, возникнет ошибка.
Давайте продемонстрируем как удалять элемент при помощи метода :
Python
num_set = {1, 2, 3, 4, 5, 6}
num_set.discard(3)
print(num_set)
1 2 3 |
num_set={1,2,3,4,5,6} num_set.discard(3) print(num_set) |
Результат:
Python
{1, 2, 4, 5, 6}
1 | {1,2,4,5,6} |
Элемент был удален из множества.
Аналогично, метод может использоваться следующим образом:
Python
num_set = {1, 2, 3, 4, 5, 6}
num_set.remove(3)
print(num_set)
1 2 3 |
num_set={1,2,3,4,5,6} num_set.remove(3) print(num_set) |
Результат:
Python
{1, 2, 4, 5, 6}
1 | {1,2,4,5,6} |
Теперь попробуем удалить элемент, которого нет во множестве. Сначала используем метод :
Python
num_set = {1, 2, 3, 4, 5, 6}
num_set.discard(7)
print(num_set)
1 2 3 |
num_set={1,2,3,4,5,6} num_set.discard(7) print(num_set) |
Результат:
Python
{1, 2, 3, 4, 5, 6}
1 | {1,2,3,4,5,6} |
Выдача выше показывает, что никакого воздействия на множество не было оказано. Теперь посмотрим, что выйдет из использования метода по аналогичному сценарию:
Python
num_set = {1, 2, 3, 4, 5, 6}
num_set.remove(7)
print(num_set)
1 2 3 |
num_set={1,2,3,4,5,6} num_set.remove(7) print(num_set) |
Результат:
Python
Traceback (most recent call last):
File «C:\Users\admin\sets.py», line 2, in <module>
num_set.remove(7)
KeyError: 7
1 2 3 4 |
Traceback(most recent call last) File»C:\Users\admin\sets.py»,line2,in<module> num_set.remove(7) KeyError7 |
Выдача показывает, что метод выдал ошибку KeyError, так как мы пытались удалить элемент, которого нет во множестве.
С методом , мы можем удалить и вернуть элемент. Так как элементы находятся в произвольном порядке, мы не можем утверждать или предсказать, какой элемент будет удален.
Например:
Python
num_set = {1, 2, 3, 4, 5, 6}
print(num_set.pop())
1 2 |
num_set={1,2,3,4,5,6} print(num_set.pop()) |
Результат:
Python
1
1 | 1 |
Вы можете использовать тот же метод при удалении элемента и возврате элементов, которые остаются во множестве. Например:
Python
num_set = {1, 2, 3, 4, 5, 6}
num_set.pop()
print(num_set)
1 2 3 |
num_set={1,2,3,4,5,6} num_set.pop() print(num_set) |
Результат:
Python
{2, 3, 4, 5, 6}
1 | {2,3,4,5,6} |
Эти элементы остаются во множестве.
Метод Python под названием поможет удалить все элементы во множестве. Например:
Python
num_set = {1, 2, 3, 4, 5, 6}
num_set.clear()
print(num_set)
1 2 3 |
num_set={1,2,3,4,5,6} num_set.clear() print(num_set) |
Результатом является пустой без каких-либо элементов внутри.
Деление с остатком
Оператор % используется для деления по модулю, и возвращает остаток от деления, а не частное. Это полезно, например, для нахождения множителей числа.
Пример деления по модулю (с остатком):
o = 85 p = 15 print(o % p)
Вывод
10
В этом примере 85 делится на 15. Результат – 5 с остатком 10. Значение выводится, поскольку оператор возвращает остаток от деления.
Если мы используем два числа с плавающей точкой для деления по модулю, число с плавающей точкой будет возвращено в качестве остатка:
q = 36.0 r = 6.0 print(o % p)
Вывод
0.0
В приведенном выше примере 36.0 делится на 6.0 без остатка, поэтому возвращается значение 0.0.
Dict comprehensions (генераторы словарей)¶
Генераторы словарей аналогичны генераторам списков, но они используются
для создания словарей.
Например, такое выражение:
In 27]: d = {} In 28]: for num in range(1, 11): ... dnum = num**2 ... In 29]: print(d) {1 1, 2 4, 3 9, 4 16, 5 25, 6 36, 7 49, 8 64, 9 81, 10 100}
Можно заменить генератором словаря:
In 30]: d = {num num**2 for num in range(1, 11)} In 31]: print(d) {1 1, 2 4, 3 9, 4 16, 5 25, 6 36, 7 49, 8 64, 9 81, 10 100}
Еще один пример, в котором надо преобразовать существующий словарь и
перевести все ключи в нижний регистр. Для начала, вариант решения без
генератора словаря:
In 32]: r1 = {'IOS' '15.4', ... 'IP' '10.255.0.1', ... 'hostname' 'london_r1', ... 'location' '21 New Globe Walk', ... 'model' '4451', ... 'vendor' 'Cisco'} ... In 33]: lower_r1 = {} In 34]: for key, value in r1.items(): ... lower_r1key.lower()] = value ... In 35]: lower_r1 Out35]: {'hostname' 'london_r1', 'ios' '15.4', 'ip' '10.255.0.1', 'location' '21 New Globe Walk', 'model' '4451', 'vendor' 'Cisco'}
Аналогичный вариант с помощью генератора словаря:
In 36]: r1 = {'IOS' '15.4', ... 'IP' '10.255.0.1', ... 'hostname' 'london_r1', ... 'location' '21 New Globe Walk', ... 'model' '4451', ... 'vendor' 'Cisco'} ... In 37]: lower_r1 = {key.lower(): value for key, value in r1.items()} In 38]: lower_r1 Out38]: {'hostname' 'london_r1', 'ios' '15.4', 'ip' '10.255.0.1', 'location' '21 New Globe Walk', 'model' '4451', 'vendor' 'Cisco'}
Как и list comprehensions, dict comprehensions можно делать вложенными.
Попробуем аналогичным образом преобразовать ключи во вложенных словарях:
In 39]: london_co = { ... 'r1' { ... 'hostname' 'london_r1', ... 'location' '21 New Globe Walk', ... 'vendor' 'Cisco', ... 'model' '4451', ... 'IOS' '15.4', ... 'IP' '10.255.0.1' ... }, ... 'r2' { ... 'hostname' 'london_r2', ... 'location' '21 New Globe Walk', ... 'vendor' 'Cisco', ... 'model' '4451', ... 'IOS' '15.4', ... 'IP' '10.255.0.2' ... }, ... 'sw1' { ... 'hostname' 'london_sw1', ... 'location' '21 New Globe Walk', ... 'vendor' 'Cisco', ... 'model' '3850', ... 'IOS' '3.6.XE', ... 'IP' '10.255.0.101' ... } ... } In 40]: lower_london_co = {} In 41]: for device, params in london_co.items(): ... lower_london_codevice = {} ... for key, value in params.items(): ... lower_london_codevice] = value ... In 42]: lower_london_co Out42]: {'r1' {'hostname' 'london_r1', 'ios' '15.4', 'ip' '10.255.0.1', 'location' '21 New Globe Walk', 'model' '4451', 'vendor' 'Cisco'}, 'r2' {'hostname' 'london_r2', 'ios' '15.4', 'ip' '10.255.0.2', 'location' '21 New Globe Walk', 'model' '4451', 'vendor' 'Cisco'}, 'sw1' {'hostname' 'london_sw1', 'ios' '3.6.XE', 'ip' '10.255.0.101', 'location' '21 New Globe Walk', 'model' '3850', 'vendor' 'Cisco'}}
Аналогичное преобразование с dict comprehensions:
Кортежи
Кортеж тоже является последовательностью и создается элементами разделёнными запятыми:
>>> companies = «Google», «Microsoft», «Tesla»
>>> companies
(‘Google’, ‘Microsoft’, ‘Tesla’)
1 |
>>>companies=»Google»,»Microsoft»,»Tesla» >>>companies (‘Google’,’Microsoft’,’Tesla’) |
При определении непустого кортежа скобки не обязательны, но они становятся обязательными когда кортеж является частью большего выражения. Пустой кортеж создаётся пустой парой скобок:
>>> companies = ()
>>> type(companies)
<class ‘tuple’>
1 |
>>>companies=() >>>type(companies) <class’tuple’> |
При определении кортежа с одним элементом запятая за ним обязательна.
>>> company = «Google»,
>>> type(company)
<class ‘tuple’>
>>> company = («Google»,)
>>> type(company)
<class ‘tuple’>
1 |
>>>company=»Google», >>>type(company) <class’tuple’> >>>company=(«Google»,) >>>type(company) <class’tuple’> |
Пропуск запятой означает что задано обычное значение, не кортеж.
>>> company = («Google»)
>>> company
‘Google’
>>> type(company)
<class ‘str’>
1 |
>>>company=(«Google») >>>company ‘Google’ >>>type(company) <class’str’> |
Кортежи индексируются как списки, но неизменямы.
>>> companies = («Google», «Microsoft», «Palantir»)
>>> companies
‘Google’
>>> companies = «Boeing»
Traceback (most recent call last):
File «<stdin>», line 1, in <module>
TypeError: ‘tuple’ object does not support item assignment
1 |
>>>companies=(«Google»,»Microsoft»,»Palantir») >>>companies ‘Google’ >>>companies=»Boeing» Traceback(most recent call last) File»<stdin>»,line1,in<module> TypeError’tuple’objectdoes notsupport item assignment |
В тоже время, если элементом кортежа является изменяемые объект, такой как список, то он может быть изменен.
>>> companies = (, )
>>> companies
(, )
>>> companies.append(«SpaceX»)
>>> companies
(, )
1 |
>>>companies=(«lockheedMartin»,»Boeing»,»Google»,»Microsoft») >>>companies (‘lockheedMartin’,’Boeing’,’Google’,’Microsoft’) >>>companies.append(«SpaceX») >>>companies (‘lockheedMartin’,’Boeing’,’SpaceX’,’Google’,’Microsoft’) |
Практическая работа по использованию словарей
Дан текст на некотором языке. Требуется подсчитать сколько раз каждое слово входит в этот текст и вывести десять
самых часто употребяемых слов в этом тексте и количество их употреблений.
В качестве примера возьмите файл с текстом лицензионного соглашения Python .
Подсказка №1: Используйте словарь, в котором ключ — слово, а знчение — количество таких слов.
Подсказка №2: Точки, запятые, вопросы и восклицательные знаки перед обработкой замените пробелами(используйте из модуля string).
Подсказка №3: Все слова приводите к нижнему регистру при помощи метода строки .
Подсказка №4: По окончании сбора статистики нужно пробежать по всем ключам из словаря и найти ключ с максимальным значением.
Дан словарь task4/en-ru.txt с однозначным соответствием английских и русских слов в таком формате:
Здесь английское и русское слово разделены двумя табуляциями и минусом: .
В файле task4/input.txt дан текст для перевода, например:
Mouse in house. Cat in house.
Cat eats mouse in dog house.
Dog eats mouse too.
Требуется сделать подстрочный перевод с помощью имеющегося словаря и вывести результат в .
Незнакомые словарю слова нужно оставлять в исходном виде.
Дан список стран и языков на которых говорят в этой стране в формате в файле task5/input.txt. На ввод задается N — длина списка и список языков. Для каждого языка укажите, в каких странах на нем говорят.
Ввод | Вывод |
---|---|
3 | |
азербайджанский | Азербайджан |
греческий | Кипр Греция |
китайский | Китай Сингапур |
В файле task6/en-ru.txt находятся строки англо-русского словаря в таком формате:
cat — кошка
dog — собака
home — домашняя папка, дом
mouse — мышь, манипулятор мышь
to do — делать, изготавливать
to make — изготавливать
Здесь английское слово (выражение) и список русских слов (выражений) разделены двумя табуляциями и минусом: .
Требуется создать русско-английский словарь и вывести его в файл в таком формате:
делать — to do
дом — home
домашняя папка — home
изготавливать — to do, to make
кошка — cat
манипулятор мышь — mouse
мышь — mouse
собака — dog
Порядок строк в выходном файле должен быть словарным с человеческой точки зрения (так называемый лексикографический порядок слов). То есть выходные строки нужно отсортировать.
Даны два файла словарей: task7/en-ru.txt и task7/ru-en.txt (в формате, описанном в упражнении №6).
en-ru.txt:
home — домашняя папка
mouse — манипулятор мышь
ru-en.txt:
дом — home
мышь — mouse
Требуется синхронизировать и актуализировать их содержимое.
en-ru.txt:
home — домашняя папка, дом
mouse — манипулятор мышь, мышь
ru-en.txt:
дом — home
домашняя папка — home
манипулятор мышь — mouse
мышь — mouse
В одном очень дружном доме, где живет Фёдор, многие жильцы оставляют ключи от квартиры соседям по дому, например на случай пожара или потопа, да и просто чтобы покормили животных или полили цветы.
Вернувшись домой после долгих странствий, Фёдор обнаруживает, что потерял свои ключи и соседей дома нет. Но вдруг у домофона он находит чужие ключи. Помогите Федору найти ключи от своей квартиры в квартирах соседей.
На ввод подается файл input.txt, в котором в первой строке записано три числа через пробел N — номер квартиры Фёдора, M — номер квартиры от которой Федор нашел ключи, K — ключ от этой квартиры. Далее i-я строка хранит описание ключей запертых в i-й квартире в формате , причем реальные номера квартир «зашифрованы» ключем от i-й квартиры(Ki) и находятся по формуле m_ij’ = m_ij — Ki. Номера квартир начинаются с 0 (кпримеру вторая строка файла соответствует 0-й квартире).
Нужно вывести ключ от квартиры Федора или None если его найти не получилось.
Ввод | Вывод |
---|---|
4 0 1 | 1 |
1 1,2 0,3 1,4 0 | |
3 0 | |
5 1,6 0 | |
1 1 | |
2 1 |
Подсказка: используйте словарь для хранения ключей от еще не открытых комнат и множество для уже проверенных комнат.
Дан текст-образец, по которому требуется сделать генератор случайного бреда на основе Марковских цепей.
Подробности спрашивайте у семинариста.
Свойства множеств
Тип в Python является подтипом (про коллекции), из данного факта есть три важных следствия:
- Определена операция проверки принадлежности элемента множеству
- Можно получить количество элементов в множестве
- Множества являются iterable-объектами
Принадлежность множеству
Проверить принадлежит ли какой-либо объект множеству можно с помощью оператора . Это один из самых распространённых вариантов использования множеств. Такая операция выполняется в среднем за с теми же оговорками, которые существуют для хеш-таблиц.
Мощность множества
Мощность множества – это характеристика множества, которая для конечных множеств просто означает количество элементов в данном множестве. Для бесконечных множеств всё несколько сложнее.
Перебор элементов множества
Как уже было отмечено выше, множества поддерживают протокол итераторов, таким образом любое множество можно использовать там, где ожидается iterable-объект.