任务如下:
在输入处,输入一串字母,接下来我们输入一个数字,该数字将指示将在字符串中搜索其变体的序列的长度。
您需要以列表的形式显示所有选项。例如,如果我们输入
AFGTYAFTGAF,然后输入数字2,那么我们将需要输入遇到的所有唯一选项而不重复,更准确地说:AF, FG, GT, GY等等。
我有以下代码:
seq = input().upper()
k_mer = int(input())
list = []
n = 0
for i in seq:
seq = seq[n:len(seq)]
k = seq[0:k_mer]
if k not in list and k != '':
list.append(k)
n += 1
print(list)
我首先检查了这个号码1,但它不再起作用了。
因此,例如,当输入 时AGTC,由于某种原因,代码看不到Т数字的第三个字母,但如果该行扩展到AGTCAGTC,只有这样它才会最后输出。
此外,您只需要使用最简单的函数,例如append, find, for。
添加调试打印:
第二个示例显示了问题:第一个字符从字符串中取出(一切正常),然后是两个(这意味着丢失了一个),然后是三个(丢失了两个)。很快线路结束并且循环空闲,但这不再重要了。您需要一次咬掉一个字符,并在循环结束时执行此操作:
这样就好多了。只是慢慢地。不需要改变线,你可以从中剪出合适的碎片:
它变得更快,但
k not in list在长列表上仍然会变慢。替换成set,代码会变得更快更简单:当您使用 缩短循环内的字符串时
seq = seq[n:len(seq)],该字符串会不断缩短:准备好控制台脚本(保存到文件 test.py 并运行):
结果: