Python - Массив индексов всех появлений определенного элемента в массиве - PullRequest
0 голосов
/ 17 февраля 2020

Этот вопрос очень похож на этот вопрос, Вопрос , за исключением того, что мне нужен ответ для Python.

Я все равно объясню вопрос. Если у меня есть массив символов, например ["a", "b", "a", "c"], то он должен вернуть массив, который включает в себя индексы всех появлений определенного символа.

Это означает, что если я введу ['a', 'b', 'a', 'c', 'c', 'a'], и мне нужно найти все появления 'a', то будет выведено [0, 2, 5].

Мне также нужно, чтобы программа была довольно быстрой, так как мне нужно было массово генерировать мой конечный продукт, поэтому вся программа должна быть быстрой. Вероятно, я буду выполнять этот фрагмент кода миллионы раз в своем коде, поэтому чем быстрее он будет, тем лучше, но сейчас я что-то принимаю.

Прямо сейчас мой код не работает, так как он просто выводит [0, 0, 0] (я запускаю через для l oop, поэтому он тоже не быстрый)

Может кто-нибудь помочь, пожалуйста? Спасибо!

Ответы [ 3 ]

3 голосов
/ 17 февраля 2020

Простой вариант, не оптимизированный для скорости:

list_of_characters = ['a', 'b', 'a', 'c', 'c', 'a']
character = 'a'
index_list = [i for i,v in enumerate(list_of_characters) if v == character]

Редактировать: Если вы делаете этот расчет много и список не меняется между каждым прогоном, вы должны предварительно вычислить решения и храните их в легкодоступном формате.

1 голос
/ 17 февраля 2020

Просто используйте функцию np.where.

>>> l=np.array(['a','b','a','c','c','a'])
>>> np.where(l=='a')
(array([0, 2, 5]),)
1 голос
/ 17 февраля 2020

Вы можете использовать defaultdict, чтобы по умолчанию указывать местоположения каждого символа в списке, а затем просто перечислять по списку и добавлять местоположения указателя. Это позволяет позже индексировать местоположение любого символа в списке.

from collections import defaultdict

my_list = ['a', 'b', 'a', 'c', 'c', 'a']

dd = defaultdict(list)
for n, c in enumerate(my_list):
    dd[c].append(n)

>>> dd['a']
[0, 2, 5]

>>> dict(dd)
{'a': [0, 2, 5], 'b': [1], 'c': [3, 4]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...