2015-11-27 2 views
0

Я хочу сделать следующее в Python:Сопоставление рисунка в виде списка строк и возвращает список индексов

Input list: ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab'] 
Input pattern: 'ab' 
Output: Return [0,2,4,6], i.e a list of indexes for every entry in input list that contains input pattern. 

В этом случае «ABC», «ABX», «стащить», «aadsd_ab 'содержат шаблон' ab ', поэтому возвращаем соответствующие индексы [0, 2, 4, 6] Каков самый простой способ сделать это в python?

ответ

2

Вы можете использовать список понимание, как так:

>>> words = ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab'] 
>>> [idx for idx, word in enumerate(words) if 'ab' in word] 
[0, 2, 4, 6] 
1

Вы также можете использовать перечисление, но список понимание также велико.

l = ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab'] 
l_idx = [] 
for idx, value in enumerate(l): 
    if 'ab' in value: 
     l_idx.append(idx) 
print l_idx 

l_idx содержит значения, которые вы искали. Удачи !

0

Если хотите использовать regex только для большего контроля над поиском

>>>l = ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab'] 
>>>lst = [] 
>>>for i in l: 
    if re.search(".*ab.*", i, re.IGNORECASE): 
     lst.append(l.index(i)) 
>>>lst 
>>>[0, 2, 4, 6] 

Объяснение: для каждого элемента в списке l найти, если он соответствует шаблону .*ab.*, если матчи затем получить индекс этого элемента и добавления это во второй список, то есть lst. regex рисунок средство найти все ab который есть какой-либо знак перед тем и последующий.

Смежные вопросы