【问题标题】:Finding position of first letter in subtring in list of strings (Python 3)在字符串列表中查找子字符串中第一个字母的位置(Python 3)
【发布时间】:2018-06-01 03:31:44
【问题描述】:

我有一个字符串列表,我试图在字符串列表中找到我正在搜索的子字符串的第一个字母的位置。我正在使用 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

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

【问题讨论】:

  • 请让我知道您是否可以将我的答案标记为正确的答案,或者是否需要进一步的帮助,以便其他有相同问题的人可以依赖它。

标签: python-3.x list find substring


【解决方案1】:

确实,您的代码不会像您希望的那样工作,因为任何单词都包含子字符串,它会检查每个单词。 避免这种情况的一个好方法是使用生成器。更具体地说,next()

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

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

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

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2023-04-03
    • 2019-09-22
    • 2020-02-14
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多