我正在尝试用Python编写一个脚本,它接受一个字符串并通过迭代移动原始序列中的字母来返回字符串列表。
例如:ACGT - > TACG - > GTAC - > CGTA - > STOP(原始序列)
我是编程的初学者,这是我成功做的事情
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']
多次(无限循环)
预期产出:
TACG
GTAC
CGTA
答案 0 :(得分:3)
基本上,您需要将最后一个元素移动到开头,直到您进入原始序列。对于此collections.deque
及其rotate()
方法(相当于module: {
rules: [
{
test: require.resolve("pace-progress"),
loader: "imports-loader?define=>false"
}
]
}
)应该是最有效的方法:
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)
答案 1 :(得分:3)
没有任何导入的简单解决方案。
def rot(s, n):
return s[-n:] + s[:-n]
for i in range(4):
print(rot('ACGT', i))
<强>输出强>
ACGT
TACG
GTAC
CGTA
答案 2 :(得分:2)
list = []
seq = "ACGT"
for i in range(len(seq), 0, -1):
list.append(seq[i:]+seq[:i])
# list = ['ACGT', 'TACG', 'GTAC', 'CGTA']
答案 3 :(得分:2)
一种选择是使用collections.deque
和rotate
:
from collections import deque
def rotator(x):
yield x
y = deque(x)
for _ in range(len(y)-1):
y.rotate(1)
yield ''.join(y)
res = list(rotator('ACGT'))
print(res)
['ACGT', 'TACG', 'GTAC', 'CGTA']
答案 4 :(得分:2)
def move_letter_forward(string):
str_list = [string]
for i in range(len(string) - 1):
str_list.append(str_list[-1][-1] + str_list[-1][:-1])
return str_list
如果您希望输出为:
TACG
GTAC
CGTA
以上代码可以更改为:
def move_letter_forward(string):
str_list = [string]
for i in range(len(string) - 1):
str_list.append(str_list[-1][-1] + str_list[-1][:-1])
return str_list[1:]
for string in move_forward('ACGT'):
print(string)
答案 5 :(得分:1)
如果您只需要旋转打印,请查看:
>>> s = 'ACGT'
>>> '-->'.join(s[i:]+s[0:i] for i in range(len(s),0,-1))
'ACGT-->TACG-->GTAC-->CGTA'
如果您需要在列表中省略'-->'.join
部分:
>>> rotations = [s[i:]+s[0:i] for i in range(len(s),0,-1)]
>>> rotations
['ACGT', 'TACG', 'GTAC', 'CGTA']
答案 6 :(得分:0)
这可以使用队列数据结构来实现。
这是一般版本
弹出最后一个索引的元素
将元素推送到第一个索引
我将实现留给您,将其用作参考Queue DS in python
这是实施 代码
from collections import deque
ip = 'ACGT'
d = deque(ip)
for i in range(len(ip)):
temp = d.pop()
d.appendleft(temp)
print(''.join(d))
OUTPUT
TACG
GTAC
CGTA
ACGT