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

Ist es möglich, so etwas zu tun? Ich habe es getestet und es funktioniert nicht. Ich möchte alle ips aus "ip" -Liste löschen, die mit 256 beginnen. 257. 258. ecc ... bis 310.Startswith mit einer Reihe von Nummer statt einer Einheit

+1

die Teile eines gültigen IP liegt im Bereich von 0 bis 255 (beide inklusive). – thefourtheye

Antwort

3

Nein, str.startswith() nimmt keinen Bereich.

Sie müssten den ersten Teil analysieren und als ganze Zahl testen; Filterung wird auch einfacher, mit einer Liste Verständnis getan:

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

Die Alternative der ipaddress library zu verwenden wäre; es wird jede ungültige Adresse mit einer ipaddress.AddressValueError Ausnahme ablehnen, und da Adressen, die ungültigen über 255 mit etwas beginnen, können Sie leicht kooptieren, dass Ihre ungültigen Adressen zu filtern:

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

so in meinem Fall muss ich verwenden: ipf = [x für x in ip wenn 257 <= int (x.partition ('.') [0]) <= 310] richtig? – CatchJoul

+0

@ Thavivelball: ja; Ich habe "ip" in "ip_addresses" umbenannt, um klarere Variablennamen zu verwenden. –

+1

@Thavivelball: Da Sie keine Beispieleingabe dat oder die erwartete Ausgabe zur Verfügung gestellt haben, kann ich Ihnen nicht mehr als das helfen. –

Verwandte Themen