我试图用Python编写一个脚本,该脚本接受一个字符串,并通过迭代移动原始序列中的字母来返回字符串列表。
例如:ACGT-->TACG-->GTAC-->CGTA-->停止(原始序列)
我是一个编程初学者,以下是我成功的做法
liste=[]
seq=list('ACGT')
nseq=list("test")
while nseq!=seq:
for i in range (0, len(seq)):
nseq[i]=seq[i-1]
''.join(nseq)
liste.append(nseq)
它只会像TACG一样返回第一步,不会继续。
输出:
['T', 'A', 'C', 'G']
多次(循环)预期产量:
TACGGTACCGTA
最佳答案
基本上,您需要将最后一个元素移动到开头,直到到达原始序列。对于这个collections.deque
和它的rotate()
方法(相当于d.appendleft(d.pop())
)应该是最有效的:
from collections import deque
def rotations(s):
yield s
d = deque(s)
for _ in range(len(d) - 1):
d.rotate(1)
yield ''.join(d)
演示:
>>> for r in rotations('ACGT'):
... print(r)
...
ACGT
TACG
GTAC
CGTA