Поиск меньшего списка в большем. Аналог str.find для списков. (python)
Есть два списка: a и b. Требуется проверить вхождение a в b и выдать индекс первого элемента. Если a в b не обнаружен вернуть -1 Например:
b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [4, 5, 6]
#вернёт 3
b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [4, 6, 5]
#вернёт -1
Я не могу использовать библиотеки кроме стандартных, идущих вместе с пайтоном.
Извините, написал непонятно. Мне нужно не посчитать количество вхождений.
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[4, 5, 6]
Мне нужно, чтобы функция подставила один список к другому и нашла индекс первого элемента a в b (В данном случае элемента 4 под третьим индексом)
Ответы (3 шт):
Автор решения: RomanR
→ Ссылка
b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [4, 5, 6]
if len(a) <= len(b):
for i in range(0, len(b) - len(a)):
if b[i:i+len(a)] == a:
print(b.index(a[0]))
exit()
print(-1)
Автор решения: Alexey_Chebotarev
→ Ссылка
Кажется никто не понял, что мне нужно, но задача оказалась гораздо легче чем я думал, и я оставлю здесь рабочий код)
def find(b, a):
first = b.index(a[0])
result = True
for i in range(1, len(a)):
if not a[i] == b[i+first]:
result = False
break
if not result:
return -1
return first
Автор решения: Sergey Glukhov
→ Ссылка
b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [4, 6, 5]
def finder(list_a, list_b):
r = []
for i in list_a:
if i in list_b:
r.append(list_b.index(i))
if Len(r) == 0:
return -1
return r
print(finder(list_a=a, list_b=b))