Python for loop overwriting

Question:

Here is my code in Python 3:

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")

I thought it should print out “successful” since there is a “134” in USAdetail. However, it seems like it is overwriting and the last element in USAdetail starts with “101”, and that’s why it did not print “successful”.

I’m just wondering how I could change the code to make sure if there is any element in USAdetail that starts with 134/135, it would print out successful. Many thanks!

Asked By: yingnan liu

||

Answers:

You need to cast to int, the string "134" is not equal to the integer 134:

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

Or store strings in the list:

firstNode =["134", "135"]

if you want to find if any match and you create firstNode, you can use str.startswith which can takes a tuple of substrings to try and match, if we add a . after each element we will get exact matched:

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")

Or store them as strings in a set and use 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")

If you don’t control firstnode creation you can stick to casting to int and make a set from 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 will short circuit on the first match, if there are no matches it will return False, set lookups are O(1) so for large amounts of data will be a very efficient solution.

Answered By: Padraic Cunningham
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.