我正在处理CS50 DNA问题,并且python count函数不断返回值,但我不确定为什么。我尝试使用find,但是实现错误
import csv, sys
#check if all arguments are provided
if len(sys.argv) != 3:
print("Usage: python dna.py data.csv sequence.txt")
exit()
#sets database to first argument
databaseFile = sys.argv[1]
#sequence is second file
sequenceFile = sys.argv[2]
#make list for data
data = []
database = []
#open csv file
with open(databaseFile, 'r') as csvfile:
#make reader
csvreader = csv.reader(csvfile)
#read in the headers
fields = next(csvreader)
fields.remove("name")
#read in the rows of data in database
for row in csvreader:
#add data, with names and database with just numbers
data.append(row)
database.append([int(i) for i in row[1:]])
#open sequence
sequence = open(sequenceFile, 'r').readline()
results = []
#for add repetitions to results
for field in fields:
results.append(sequence.count(field))
print(results)
found = False
for i in database:
if (results == i):
print(data[i])
found = True
if not found:
print("No match")
我可以使用哪种其他方法按顺序计算“字段”的重复次数,例如在加载时:
python dna.py数据库/large.csv序列/19.txt我得到的结果是: [47, 40, 34, 11, 24, 31, 60, 26]
No match
而不是fred是: [37, 40, 10, 6, 5, 10, 28, 8]
问题可以在以下位置找到:https : //cs50.harvard.edu/x/2020/psets/6/dna/
使用正则表达式查找连续的匹配项。
import re
s = 'AGTCAGTCAGTCTTTTAGCTAGTC'
STR = 'AGTC'
strands = re.findall(f'(?:{STR})+', s)
print(strands) # prints `['AGTCAGTCAGTC', 'AGTC']`
my_max = max(map(len, strands))//len(STR)
print(my_max)
打印3
正确,因为它连续出现3次(并在序列末尾再次出现)。
我希望该代码段可以帮助解决您的部分问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句