Второй, третий и т. Д. Элементы ваших кортежей выглядят как ip-адреса.Вы можете использовать регулярные выражения для распознавания определенного формата. (я рискну предположить, что вы будете играть с ip-адресами) .
Вот еще одно решение, менее чистое, чем у Рафаэля или RoadRunner's , но допускает произвольное количество адресов.
import re
test = [
'Vlan101',
'1.1.1.0/24',
'Vlan111',
'2.1.1.0/24',
'Vlan701',
'3.1.1.0/24',
'Vlan703',
'4.1.1.0/24',
'5.5.5.0/24']
result = [[]] # we first store the stuff as lists to allow for appending
for item in test:
# matches ipaddresses with xxx.xxx.xxx.xxx/xx
if re.match(r'\d{,3}\.\d{,3}\.\d{,3}\.\d{,3}/\d+', item):
result[-1].append(item) # appends an ipaddress
else:
result.append([item]) # appends a new 'Vlan...' (i.e. anything but an ipaddress)
tups = list(map(tuple, result)) # cast each of the lists into tuples
print(result)
print(tups)
Вывод:
[[], ['Vlan101', '1.1.1.0/24'], ['Vlan111', '2.1.1.0/24'], ['Vlan701', '3.1.1.0/24'], ['Vlan703', '4.1.1.0/24', '5.5.5.0/24']]
[(), ('Vlan101', '1.1.1.0/24'), ('Vlan111', '2.1.1.0/24'), ('Vlan701', '3.1.1.0/24'), ('Vlan703', '4.1.1.0/24', '5.5.5.0/24')]
Пустые []
и ()
находятся в началеЕсли ваш список test
начинается сразу с адресов (это обеспечивает запасной вариант для result[-1]
).
Если вы хотите удалить эти результаты, просто сделайте срез
print(tups[1:])
Вывод:
[('Vlan101', '1.1.1.0/24'), ('Vlan111', '2.1.1.0/24'), ('Vlan701', '3.1.1.0/24'), ('Vlan703', '4.1.1.0/24', '5.5.5.0/24')]