Вопрос по list, python – Найти индексы последовательности в списке в Python

4

Я новичок и надеюсь, что это не слишком очевидно, но я просто не могу найти краткого и точного ответа на следующую проблему.

У меня есть два списка:

a = [2,3,5,2,5,6,7,2]
b = [2,5,6]

Я хотел бы найти, когда все индексы второго списка (b) находятся в первом списке (a), так что я получаю что-то вроде этого:

индексы б в а:3, 4, 5 или жеb = a[3:6]

Ваш Ответ

2   ответа
-2

a = [2,3,5,2,5,6,7,2]
b = [2,5,6]
for i in range(len(a)):
    if a[i] in b:
        print i

Конечно, вы должны отформатировать оператор печати по своему вкусу. Или не печатайте и не сохраняйте результат, скажем, в другом списке.

Удачи!

Нет. Проверьте пример вывода, который предоставил OP.
Единственный индекс в a, который не отображается на элемент в b, это 1 и 6. Так что правильный вывод не должен быть 0, 2, 3, 4, 5, 7?
Похоже, что ОП ищет подсписок вa это точно соответствуетb, Я отредактирую его вопрос, чтобы сделать его более понятным.
14

>>> [(i, i+len(b)) for i in range(len(a)) if a[i:i+len(b)] == b]
[(3, 6)]

Или с циклом:

>>> indexes = []
>>> for i in range(len(a)):
...    if a[i:i+len(b)] == b:
...        indexes.append((i, i+len(b)))
... 
>>> indexes
[(3, 6)]
Это кажется немного лучше:[(i, i+len(b)) for i in range(len(a)-len(b)+1) if a[i:i+len(b)] == b]
Большое спасибо, сочетание этого ответа и комментария действительно помогло мне! :) user1376377
ваш диапазон понимания должен бытьxrange(len(a))в противном случае он не будет соответствовать seq, если его в конце.
@fraxel: Хороший улов, спасибо! :)

Похожие вопросы