如何在包含python中正在搜索的字符串的列表中获取项的索引

2024-09-23 14:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在字符串列表中寻找一个字符串,要找到的字符串是“search”列表中某个字符串的子集 我需要一种方法来获取在列表的哪个项目中找到了字符串 示例:

mylist = ['hola pepe', 'hola manola', 'hola julian', 'holasofi']

searchitem1 = 'pepe'

searchitem2 = 'sofi'

我试过:

     mylist.index('pepe')

但没有起作用(因为我猜它不是确切的字符串?) 我也试过:

    if any(ext in 'pepe' for ext in mylist): mylist.index(ext)

但也没用。。。。 我所看到的是当字符串被找到时停止,并从发生查找的项的代码中获取。。。。你知道吗

谢谢!你知道吗


Tags: 项目方法字符串in示例列表searchindex
2条回答

如果您是Python新手,那么现在使用Chris answer中的经典方法可能会更好。但是如果您对生成器感到好奇,请参见下面使用生成器表达式的示例(基本上与Chris answer相同,但更简洁):

>>> mylist = ['hola pepe', 'hola manola', 'hola julian', 'holasofi', 'oi pepe']
>>> gen = ((index,elem) for index, elem in enumerate(mylist) if 'pepe' in elem)
>>> next(gen)
(0, 'hola pepe')
>>> next(gen)
(4, 'oi pepe')
>>> next(gen)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

索引可以像往常一样提取

>>> next(gen)[0]

即使生成器表达式中没有与if子句匹配的元素,也始终会创建生成器对象。你知道吗

要在next()不产生更多值时处理异常,请使用try块捕获StopIteration

search = 'pepe'
...
try:
    next_result = next(gen)

except StopIteration:
    print('No more matches for {}'.format(search))

您可以编写一个函数,当它找到包含您感兴趣的字符串的第一个索引时将返回该函数。另外,如果需要包含字符串的所有索引,可以使用yield创建一个生成器,生成包含该字符串的所有索引。你知道吗

def get_first_index_contains(mylist, mystring):
    for index, element in enumerate(mylist):
        if mystring in element:
            return index

def get_all_index_contains(mylist, mystring):
    for index, element in enumerate(mylist):
        if mystring in element:
            yield index

mylist = ['hola pepe', 'hola manola', 'hola julian', 'holasofi']
searchitem1 = 'pepe'
searchitem2 = 'sofi'
print(get_first_index_contains(mylist, searchitem1))
print(get_first_index_contains(mylist, searchitem2))
print(list(get_all_index_contains(mylist, 'hola')))

输出

0
3
[0, 1, 2, 3]

相关问题 更多 >