Полезные функции и пр.¶
(list,dist,set) comprehensions¶
"Генераторы" списков, словарей, множеств.
"Задача: вывести на экран список состоящий из численных целых элементов"
In [56]: vlans = [10, 20, 40, 50, 60]
"# при объединении такого списка в строку будет выаваться ошибка, т.к. нельзя преобразовать напяямую число в строку."
In [57]: ", ".join(vlans)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-57-18847b333370> in <module>
----> 1 ", ".join(vlans)
TypeError: sequence item 0: expected str instance, int found
"# для решения данной задачи можно использовать генератор списка,"
"# в котором будут уже преобразованные с строку элементы"
In [58]: vlans_str = [str(v) for v in vlans]
In [59]: ", ".join(vlans_str)
Out[59]: '10, 20, 40, 50, 60'
"# более укороченный варинт 'паровозиком'"
In [60]: ", ".join([str(v) for v in vlans]}
Out[60]: '10, 20, 40, 50, 60'
"# По сути выщеописанная генерация это укорченный вариант такой конструкции"
In [62]: vlans_str = []
...: for v in vlans:
...: vlans_str.append(str(v))
In [63]: vlans_str
Out[63]: ['10', '20', '40', '50', '60']
zip¶
Позволяет упаковывать несколько данных в одну структуру.
"Пример создание списка словарей из структуры данных: заголовок + список списков"
In [26]: list1 = [
["gi0/1", "10.0.1.1", "duplex", "up"],
["gi0/2", "10.0.1.2", "auto", "up"],
["gi0/3", "10.0.1.3", "duplex", "down"]
]
In [27]: header = ["interface", "ip", "physic", "status"]
"zip - яляется "ленивым" генераторим, т.е. подстваляет данные только тогда, когда точно определен тип"
In [14]: [zip(header,l) for l in list1]
Out[14]: [<zip at 0x7f2fb0271100>, <zip at 0x7f2fb0271740>, <zip at 0x7f2fb02aef40>]
In [15]: [dict(zip(header,l)) for l in list1]
Out[15]:
[{'interface': 'gi0/1', 'ip': '10.0.1.1', 'physic': 'duplex', 'status': 'up'},
{'interface': 'gi0/2', 'ip': '10.0.1.2', 'physic': 'auto', 'status': 'up'},
{'interface': 'gi0/3',
'ip': '10.0.1.3',
'physic': 'duplex',
'status': 'down'}]
In [16]: [list(zip(header,l)) for l in list1]
Out[16]:
[[('interface', 'gi0/1'),
('ip', '10.0.1.1'),
('physic', 'duplex'),
('status', 'up')],
[('interface', 'gi0/2'),
('ip', '10.0.1.2'),
('physic', 'auto'),
('status', 'up')],
[('interface', 'gi0/3'),
('ip', '10.0.1.3'),
('physic', 'duplex'),
('status', 'down')]]
In [28]: dict_intf = [dict(zip(header,l)) for l in list1]
In [29]: dict_intf
Out[29]:
[{'interface': 'gi0/1', 'ip': '10.0.1.1', 'physic': 'duplex', 'status': 'up'},
{'interface': 'gi0/2', 'ip': '10.0.1.2', 'physic': 'auto', 'status': 'up'},
{'interface': 'gi0/3', 'ip': '10.0.1.3', 'physic': 'duplex', 'status': 'down'}
]
"#В структуре типа список словарей удобно обращаться к однотипным данным по ключу."
"# Например получить все ip адреса на интерфейсах"
In [30]: for intf in dict_intf:
...: print(intf["ip"])
...:
10.0.1.1
10.0.1.2
10.0.1.3
map¶
map - производит со структурой данных установленную операцию (данная операция идет первым аргуметом в map-e) map - тоже "ленивый" генератор - не подставит данные, пока не отпределится точно их тип
In [7]: vlans = [10, 20, 40, 50, 60]
In [8]: map(str,vlans)
Out[8]: <map at 0x7f2fb0290520>
"# Например здесь map производит операцию str для элементов списка vlans"
In [9]: list(map(str,vlans))
Out[9]: ['10', '20', '40', '50', '60']
In [10]: set(map(str,vlans))
Out[10]: {'10', '20', '40', '50', '60'}
lambda¶
специальная анонимная функция, которая сразу возвращает значение.
"Пример функции lambda"
Последнее обновление: 2023-05-29