i tried chaning from a list to a dictionary but it did not work
sorry for this newbie question, but i really tried doing it on my own for lots of time but it does not work.
I reduced the problem to finding a arrey of strings(needle) in another arrey 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!")
Advertisement
Answer
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