簡體   English   中英

更改列表中的多個位置

[英]Changing multiple positions in a 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'] 

有什么建議?

您正在重新使用舊的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']

根據我對你的問題的理解,你需要兩個循環。 一個用於位置(除了第一個和最后一個),另一個用於四個字母(核酸?)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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM