Массивы Numpy по умолчанию будут перебирать строки, поэтому нет необходимости делать for i in range(...)
:
x = np.array(list(range(3)), list(range(3,6)))
for i in x:
print(i)
[0 1 2]
[3 4 5]
# This yields the same result, so use the former
for i in range(x.shape[0]):
print(x[i])
[0 1 2]
[3 4 5]
Далее, вы тратите кучу времени на выполнение str.lower()
снова и снова.Я бы, вероятно, заранее опустил все ваши строки заранее:
y = np.array([list('ABC'), list('DEF')])
np.char.lower(y)
array([['a', 'b', 'c'],
['d', 'e', 'f']],
dtype='<U1')
# apply this to string1 and string2
l_str1, l_str2 = string1.lower(), string2.lower()
Теперь ваш цикл должен выглядеть следующим образом:
l_str1, l_str2 = string1.lower(), string2.lower()
for val1, val2 in thingList:
to_check = val2.lower()
if to_check in l_str1 or to_check in l_str2:
tempThing.append(val1)
tempCode.append(val2)
Теперь вы можете применить это к пониманию списка:
# you can zip these together so you aren't using str.lower()
# for all of your if statements
tmp = ((*uprow) for uprow, (a, b) in zip(thingList, np.char.lower(thingList))
if b in l_str1 or b in l_str2)
# this will unpack pairs
tempThing, tempCode = zip(*tmp)