我试图用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

10-08 01:39