我想在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',' nab',' aadsd_ab'包含模式' ab'所以返回各自的索引[0,2,4,6] 在python中执行此操作的最简单方法是什么?
答案 0 :(得分: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 :(得分: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
包含您要查找的值。祝你好运!
答案 2 :(得分: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
。
正则表达式模式意味着找到之前和之后都有任何字符的所有ab
。