我有一个字符串列表,我试图找到我在字符串列表中搜索的子字符串的第一个字母的位置。我使用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"但是我不确定如何在成功找到一个子字符串后停止搜索。感谢任何帮助,谢谢。
答案 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(): ...