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

时间:2017-12-18 18:31:53

标签: python-3.x list find substring

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

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

1 个答案:

答案 0 :(得分:1)

确实你的代码不能按你的意愿工作,因为假定任何单词包含子字符串,它将检查每一个字符串。 避免这种情况的好方法是使用发电机。更具体地说, next()

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

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

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