2016-03-29 14 views
2

Hier überschreiben ist mein Code in Python 3:Python for-Schleife

firstNode =[134, 135] 
USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11'] 
for each in USAdetail: 
    if each.split('.')[0] in firstNode: 
     print ("successful") 

Ich dachte, es ausdrucken sollte "erfolgreich", da es eine "134" in USAdetail ist. Es scheint jedoch so zu sein, als würde es überschrieben und das letzte Element in USAdetail beginnt mit "101" und deshalb wurde es nicht "erfolgreich" gedruckt.

Ich frage mich nur, wie ich den Code ändern könnte, um sicherzustellen, wenn es ein Element in USAdetail gibt, das mit 134/135 beginnt, würde es erfolgreich ausdrucken. Danke vielmals!

Antwort

3

Sie müssen die Zeichenfolge "134" in int zu werfen, ist für die ganze Zahl nicht gleich 134:

if int(each.split('.')[0]) in firstNode: 

Oder speichern Strings in der Liste:

firstNode =["134", "135"] 

wenn Sie, wenn any finden wollen Übereinstimmung und Sie erstellen FirstNode, können Sie str.startswith verwenden, die ein Tupel von Teilstrings zu versuchen und zu entsprechen braucht, wenn wir eine . nach eac hinzufügen h Element werden wir genau abgestimmt erhalten:

USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11'] 
firstNode = ("134.", "135.") 

if any(x.startswith(firstNode) for x in USAdetail): 
    print("Successful") 

oder speichern sie als Zeichenfolgen in einer set und verwenden in:

USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11'] 
firstNode = {"134", "135"} 

if any(x.split(".",1)[0] in firstNode for x in USAdetail): 
    print("Successful") 

Wenn Sie nicht firstnode Schöpfung steuern Sie Casting-Stick kann in int und macht einen Satz von firstnode:

USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11'] 
firstNode = [134, 135] 

st = set(firstNode) 
if any(int(x.split(".",1)[0]) in st for x in USAdetail): 
     print("Successful") 

any wird Kurzschluss auf dem ersten Spiel, wenn es keine Übereinstimmungen gibt es falsch zurück, setzte l Ookups sind O(1) so für große Datenmengen wird eine sehr effiziente Lösung sein.

+0

thx für die gründliche antwort !! –