我有一个字符串,我想在整个长度的每个位置操纵。
例如,我有一个看起来像这样的字符串:
string1 = 'AATGCATT'
我想创建一个列表,我一次将一个位置更改为A,T,C或G.我正在考虑使用一种方法:
liststring = list(string1)
changedstrings = []
for pos in range(2, len(liststring) - 2): ##I don't want to change the first and last to characters of the string
if liststring[pos] != 'A':
liststring[pos] = 'A'
random1 = "".join(liststring)
changedstrings.append(random1)
我正在考虑使用类似的方法将其余的更改(将其余位置更改为G,C和T)附加到上面生成的列表中。但是,当我打印changedstrings
列表时,显示此代码会在前两个位置之后将所有位置更改为A.我真的只想将位置3更改为'A'并附加到列表中。然后将位置4更改为“A”并附加到列表,依此类推给我一个列表:
changedstrings = ['AAAGCATT', 'AATACATT', 'AATGAATT']
有什么建议吗?
答案 0 :(得分:2)
您正在重复使用旧的liststring
变量。在循环内初始化它:
changedstrings = []
for pos in range(2, len(liststring) - 2):
liststring = list(string1) # Move this line here
if liststring[pos] != 'A':
liststring[pos] = 'A'
random1 = "".join(liststring)
changedstrings.append(random1)
print(changedstrings)
结果
['AAAGCATT', 'AATACATT', 'AATGAATT']
答案 1 :(得分:0)
根据我对你的问题的理解,你需要两个循环。一个用于位置(除第一个和最后一个之外),另一个用于四个字母(核酸?)A,T,G,C。您可以决定首先放置哪个循环。
要更改除第一个和最后一个之外的所有位置,它应为for pos in range( 1, len(liststring)-1):
。查看range
函数的文档。还要看看索引如何在python中工作。
string1 = 'AATGCATT'
changedstrings = []
for new_char in ('A','T','G','C'):
for pos in range( 1, len(string1)-1 ):
if string1[pos] != new_char:
liststring = list(string1)
liststring[pos] = new_char
changedstrings.append("".join(liststring))
print (changedstrings)