2016-10-01 3 views
-2
ip = a list of ips 
ipf = list(filter(lambda x: x if not x.startswith(str(range(257,311))) else None, ip)) 

Возможно ли сделать что-то подобное? Я тестировал его, и он не работает. Я хочу удалить все ips из списка "ip", начинающиеся с 256. 257. 258. ecc ... to 310.Стартовый номер с рядом единиц измерения

+1

части действительного IP будет находиться в диапазоне от 0 до 255 (оба включительно). – thefourtheye

ответ

3

No, str.startswith() не принимает значения.

Вам нужно будет разобрать первую часть и проверить ее как целое; фильтрация также легче сделать с помощью списка понимания:

[ip for ip in ip_addresses if 257 <= int(ip.partition('.')[0]) <= 310] 

Альтернативой было бы использовать ipaddress library; он будет отвергать любой недопустимый адрес с ipaddress.AddressValueError исключения, и с теми адресами, которые начинаются с чем более 255 являются недействительными, вы можете легко кооптировать, что отфильтровать недействительные адреса:

import ipaddress 

def valid_ip(ip): 
    try: 
     ipaddress.IPv4Address(ip) 
    except ipaddress.AddressValueError: 
     return False 
    else: 
     return True 

[ip for ip in ip_addresses if valid_ip(ip)] 
+0

, поэтому в моем случае мне нужно использовать: ipf = [x for x in ip if 257 <= int (x.partition ('.') [0]) <= 310] правильно? – CatchJoul

+0

@Thavivelball: да; Я переименовал 'ip' в' ip_addresses' для использования более ясных имен переменных. –

+1

@Thavivelball: так как вы не представили ни один образец ввода или ожидаемый результат, я не могу помочь вам больше, чем это. –

Смежные вопросы