【问题标题】:How to write a function to find positions of substring within a larger string without using the 'find' function?如何编写一个函数来查找较大字符串中子字符串的位置而不使用“查找”函数?
【发布时间】:2019-07-03 19:54:09
【问题描述】:

我最近刚开始使用 python,我对 python 和一般编码非常陌生,我在一个班级中,我们被分配在 Python 中找到一个需要两个 DNA 序列字符串的函数(比如string1 和 string2) 作为输入,并返回 string2 作为 string1 的子字符串存在的位置列表。而且由于我们应该熟悉编码是如何工作的,所以我们不能使用“find”内置函数。我真的很困惑如何开始这个问题。但这就是我目前所拥有的:

def linear(seq, sub):
    positions = [0]
    for i in range(len(sub)):
        if seq[i:i+len(sub)] == sub:
             positions[0]+=1
    return( positions )

当我把它放进去时我得到一个错误,但我应该得到一个子字符串出现位置的列表。如果有人可以指导我应该朝哪个方向前进,那将非常有帮助。

例如,如果序列是'ATTCCATGGACCTAGTCAT'并且我要查找的子字符串是'CAT',那么输出应该是[5,17]

【问题讨论】:

  • 既然这是一个作业,没有人会给你答案。具体来说,请提供您收到的错误,有人可能会帮助您解决错误。

标签: python string list substring linear-search


【解决方案1】:

不幸的是,它不能是[5,17],因为python中的索引从0开始,它应该是[4,16]。您可以使用for 循环遍历索引,直到最后一个索引减去子字符串的长度加上1,以免超出范围。然后检查字符串的切片,即当前索引直到当前索引加上子字符串的长度(如果它是'CAT',那么你得到字符串的3长度的每个切片)是否是等于子串。如果是,则将索引附加到索引列表中。

def find(st,sub):
    list_of_pos=[]
    for i in range(len(st)-len(sub)+1):
        if st[i:i+len(sub)]==sub:
            list_of_pos.append(i)
    return list_of_pos

如果你使用列表推导,你可以使它更紧凑:

def find(st,sub):
    return [i for i in range(len(st)-len(sub)+1) if st[i:i+len(sub)]==sub]

【讨论】:

  • 非常感谢!这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2017-03-27
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
相关资源
最近更新 更多