首页 文章

在字符串列表中查找子字符串中第一个字母的位置(Python 3)

提问于
浏览
1

我有一个字符串列表,我正在尝试找到我在字符串列表中搜索的子字符串的第一个字母的位置 . 我正在使用find()方法执行此操作,但是当我尝试打印第一个字母的位置时,Python会返回正确的位置,但之后会抛出-1,就像它找不到子字符串一样,但只是在找到它之后 . 我想知道如何返回子串的第一个字母的位置而不返回正确值后的-1 .

这是我的代码:

mylist = ["blasdactiverehu", "sdfsfgiuyremdn"]

word = "active"

if any(word in x for x in mylist) == True:
    for x in mylist:
        position = x.find(word)
        print(position)

输出是:

5
-1

我期望输出只是:

5

我认为这可能与循环正在为列表中的每个字符串搜索子字符串这一事实有关,并且在找到它仍然搜索更多的位置后,当然会返回错误,因为只有一个子字符串出现“活动” “但是,我不确定如何在成功找到一个子字符串后停止搜索 . 感谢任何帮助,谢谢 .

1 回答

  • 1

    实际上,您的代码将无法按照您的意愿运行,因为假定任何单词包含子字符串,它将对每个单词进行检查 . 避免这种情况的好方法是使用发电机 . 更具体地说, next()

    default_val = '-1'
    position = next((x.find(word) for x in mylist if word in x), default_val)
    print(position)
    

    它将简单地为列表'mylist'中的第一个字符串"x"提供子字符串"word"的位置,该字符串将符合条件 if word in x .

    顺便说一句,在使用any()时不需要检查== True,它已经返回True / False,所以你可以简单地做 if any(): ...

相关问题