совпадение списка в python: получить индексы под-списка в большем списке

Для двух списков,

a = [1, 2, 9, 3, 8, ...] (no duplicate values in a, but a is very big) b = [1, 9, 1,...] (set(b) is a subset of set(a), 1<<len(b)<<len(a)) indices = get_indices_of_a(a, b) 

как вернуть get_indices_of_a indices = [0, 2, 0,...] возврата indices = [0, 2, 0,...] с array(a)[indices] = b ? Есть ли более быстрый метод, чем использование a.index , которое занимает слишком много времени?

Создание b – это быстрый метод сопоставления списков и возвращающих индексов (см. Сравнение двух списков в python и возвращаемых индексов совпадающих значений ), но он потеряет индекс второго 1 а также последовательность индексов в этом случае ,

2 Solutions collect form web for “совпадение списка в python: получить индексы под-списка в большем списке”

Быстрый метод (когда a – большой список) будет использовать dict для сопоставления значений по индексам a :

 >>> index_dict = dict((value, idx) for idx,value in enumerate(a)) >>> [index_dict[x] for x in b] [0, 2, 0] 

Это приведет к линейному времени в среднем случае по сравнению с использованием a.index которое будет принимать квадратичное время.

Предполагая, что мы работаем с меньшими списками, это так же просто:

 >>> a = [1, 2, 9, 3, 8] >>> b = [1, 9, 1] >>> [a.index(item) for item in b] [0, 2, 0] 

В больших списках это станет довольно дорогостоящим.

(Если есть дубликаты, первое вхождение всегда будет тем, что указано в результирующем списке, если not set(b) <= set(a) , вы получите ValueError).

  • Python - значения суммы в словаре
  • Самый быстрый способ поиска списка в python
  • Список Python не отражает переменные изменения
  • Разделить список Python на пользовательский размер блока на основе второго списка
  • Доступ к элементам в списках в словаре python
  • объединить два списка в словарь, если шаблон соответствует
  • Как сделать упорядоченный словарь из списка списков?
  • Сортировка вложенного списка двумя элементами
  •  
    Interesting Posts for Van-Lav

    Цитирование через столбцы в CSV-файлах в Python

    Редактируйте существующие книги и листы excel с xlrd и xlwt

    Не удалось запустить службу nohup из-за «INFO spawnerr: неизвестная ошибка, создающая диспетчеров для« app_name »: EACCES '

    TensorFlow: обучение на собственном изображении

    Остановка встроенного Python

    Как отключить проверку с помощью py.test?

    Получите N максимальных значений и индексов вдоль оси в массиве NumPy

    Как вы даже можете дать вход (FST) FST? Где идет выход?

    Активировать среду в Anaconda3

    Создайте пустой список в python с определенным размером

    Django: поддержка аргументов строкового представления для url () устарела и будет удалена в Django 1.10

    Перевод кода с Python на Smalltalk

    Как сканировать данные с связанных веб-страниц на веб-странице, которую мы сканируем

    Как получить информацию из facebook с помощью python?

    Графический график с минимальным, максимальным, средним и стандартным отклонениями

    Python - лучший язык программирования в мире.