Python for loop overwriting

Here is my code in Python 3:

firstNode =[134, 135]
USAdetail =['', '', '','', '']
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!


  • 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 =['', '', '','', '']
    firstNode = ("134.", "135.")
    if any(x.startswith(firstNode ) for x in USAdetail):

    Or store them as strings in a set and use in:

    USAdetail =['', '', '','', '']
    firstNode = {"134", "135"}
    if any(x.split(".",1)[0] in firstNode for x in USAdetail):

    If you don't control firstnode creation you can stick to casting to int and make a set from firstnode:

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

    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.