返回整个列表中第一项的位置,而不是每个项的位置?

mgdq6dx1  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(395)

这个代码应该读取一个基因组的文本文件,并且给定一个模式,应该返回该模式出现的次数及其位置。相反,它只返回出现的次数和第一次出现的位置。这是一个运行代码的示例,它不返回35次出现的位置,而是返回第一个位置35次。


# open the file with the original sequence

myfile = open('Vibrio_cholerae.txt')

# set the file to the variable Text to read and scan

Text = myfile.read()

# insert the pattern

Pattern = "TAATGGCT"

PatternLocations = []

def PatternCount(Text,Pattern):
    count = 0
    for i in range (len(Text)-len(Pattern)+1):
        if Text [i:i+len(Pattern)] == Pattern:
            count +=1
            PatternLocations.append(Text.index(Pattern))
    return count

# print the result of calling PatternCount on Text and Pattern.

print (f"Number of times the Pattern is repeated: {PatternCount(Text,Pattern)} time(s).")
print(f"List of Pattern locations: {PatternLocations}")
ctrmrzij

ctrmrzij1#

是的

PatternLocations.append(Text.index(Pattern))
``` `.index` 只有一个参数就行了

Return the lowest index in S where substring sub is found

你应该这样做

PatternLocations.append(i)

正如您不使用索引而是使用

if Text [i:i+len(Pattern)] == Pattern:

nmpmafwu

nmpmafwu2#

我建议您使用 re .
下面是一个片段:

from re import finditer
for match in finditer(pattern, Text):
    print(match.span(), match.group())

来自我使用的自定义示例( pattern='livraison' )它返回的结果是这样的:

>>>(18, 27) livraison
>>>(80, 89) livraison
>>>(168, 177) livraison
>>>(290, 299) livraison

相关问题