Finding a needle in a haystack *TypeError: list indices must be integers or slices, not str*

Question:

i tried changing from a list to a dictionary but it did not work.

I reduced the problem to finding a array of strings(needle) in another array of strings(hay). The rest i can do on my own

needle = [] 
for x in range(2015,2017):
    needle.append(str(x))


hay = [] 
for x in range(2015,2090):
    hay.append(str(x))

print(needle)
print(hay)

for a in needle:
    for b in hay:
        if needle[b] in hay[a]:
            print("Found!")
        else:        
            print("Not found!")
Asked By: mahle-majstr

||

Answers:

There are different numbers involved here – you have the value/element (i.e. the thing you’re adding to the array) and the index; the element’s position within that array. When comparing your needle value with your haystack value you want to compare the values (which you’re doing); but to get those values you want to look in the array in the relevant position (which you’re not).

Instead, try something like this:

needle = [] 
for x in range(2015,2017):
    needle.append(str(x))

hay = [] 
for x in range(2015,2022):
    hay.append(str(x))

print(needle)
print(hay)

for needleIndex in range(len(needle)):
    for hayIndex in range(len(hay)):
        if needle[needleIndex] == hay[hayIndex]:
            print("Found!")
        else:        
            print("Not found!")

This change means that instead of a being '2015', '2016', '2017' instead needleIndex is 0,1,2 and needle[needleIndex] is '2015', '2016', '2017'.

Hope that helps to clarify what’s going on.

ps. For this example you don’t need the indexes; you could just have

for a in needle:
    for b in hay:
        if b == a:
            print("Found!")
        else:        
            print("Not found!")

Simpler still; you’ve shown that you’re aware of the in operator; though you’ve been comparing individual values from the 2 arrays (hence I changed it to == above)… You can use your in operator like this:

for a in needle:
    if a in hay:
        print("Found!")
    else:        
        print("Not found!")

You can also use the array_intersect function to check for all elements which exist in both arrays… More on that here: https://stackoverflow.com/a/8679430/361842

Answered By: JohnLBevan
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.