获取包含子字符串的第一个列表索引?

55 投票
11 回答
80876 浏览
提问于 2025-04-15 18:41

对于列表来说,方法 list.index(x) 会返回列表中第一个值为 x 的项的索引位置。但是,如果我想查看列表项内部的内容,而不仅仅是整个项,我该如何用最符合Python风格的方法来实现呢?

例如,使用

l = ['the cat ate the mouse',
     'the tiger ate the chicken',
     'the horse ate the straw']

这个函数在传入参数 tiger 时会返回 1

11 个回答

8

这是对abyx解决方案的一种变体(优化到一旦找到匹配就停止)

def first_substring(strings, substring):
    return next(i for i, string in enumerate(strings) if substring in string)

如果你使用的是2.6版本之前的版本,你需要把next()放在最后面

def first_substring(strings, substring):
    return (i for i, string in enumerate(strings) if substring in string).next()
39

用一句话就能解决:

index = [idx for idx, s in enumerate(l) if 'tiger' in s][0]
42

一种简单的方法:

def index_containing_substring(the_list, substring):
    for i, s in enumerate(the_list):
        if substring in s:
              return i
    return -1

撰写回答