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

これは何かできますか?私はそれをテストし、それは動作しません。 256から始まる「ip」リストからすべてのipsを削除したいと考えています。257. 258. ecc ... to 310.番号の代わりに番号の範囲で開始する

+1

部品を0〜255(両端を含む)の範囲内になります。 – thefourtheye

答えて

3

いいえ、str.startswith()は範囲をとっていません。

最初の部分を解析して整数としてテストする必要があります。フィルタリングはまた、リスト内包で行わ簡単です:

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

代替ipaddress libraryを使用することです。それはipaddress.AddressValueError例外を除いて、無効なアドレスを拒否します、と255の上には何も始まるアドレスが無効であるため、簡単にあなたの無効なアドレスフィルタリングすることを共同選ぶことができます:有効なIPの

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

私の場合、私は以下を使用する必要があります:257 <= int(x.partition( '。')[0])<= 310]なら、ipf = – CatchJoul

+0

@Thavivelball:はい;より明確な変数名を使用するには、 'ip'を' ip_addresses'に改名しました。 –

+1

@Thavivelball:サンプル入力データや予想される出力を提供していないので、これ以上はお手伝いできません。 –

関連する問題