Если вы хотите найти все совпадения, вам потребуется некоторая форма повторения (итеративный цикл или рекурсия).
Судя по сигнатуре вашей функции, которую вы намеревались использоватьрекурсия, которая будет выглядеть следующим образом:
def matchall_version1(theList, value, i=0):
try:
i = theList.index(value, i)
yield i
yield from matchall_version1(theList, value, i+1)
except ValueError:
pass
И используя цикл, ваш код будет выглядеть так:
def matchall_version2(theList, value):
i = 0
try:
while True:
i = theList.index(value, i + 1)
yield i
except ValueError:
pass
Однако я хотел бы предложить эту другую версию, которая гораздо болеечитаемее, чем у вас imho:
def matchall_version3(theList, value):
for i, x in enumerate(theList):
if x == value:
yield i
Все три версии дают одинаковый результат.This:
theList = ['a','e','i','o','u','e','o','e']
print(list(matchall_version1(theList, 'e')))
print(list(matchall_version2(theList, 'e')))
print(list(matchall_version3(theList, 'e')))
Печатает это:
[1, 5, 7]
[1, 5, 7]
[1, 5, 7]