更改列表中的多个位置

时间:2016-03-07 01:54:07

标签: python list

我有一个字符串,我想在整个长度的每个位置操纵。

例如,我有一个看起来像这样的字符串:

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'] 

有什么建议吗?

2 个答案:

答案 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)