我有一个字符串列表,我正在尝试找到我在字符串列表中搜索的子字符串的第一个字母的位置。我正在使用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
我认为这可能与循环正在为列表中的每个字符串搜索子字符串这一事实有关,并且在找到它仍然搜索更多的位置后,当然会返回错误,因为只有一个子字符串出现“活动” “但是,我不确定如何在成功找到一个子字符串后停止搜索。感谢任何帮助,谢谢。
实际上,您的代码将无法按您的意愿运行,因为假定任何单词都包含子字符串,它将对每个单词进行检查。避免这种情况的好方法是使用发电机。更具体地说,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(): ...