簡體   English   中英

使用 python 使用動態創建的 substring 變量(或循環)替換列表/字符串中的對象

[英]replacing objects in list/string using dynamically created substring variables (or loops) using python

我是編碼新手,有一個關於如何替換列表中的對象並以包含這些字母替換的所有可能組合的字符串列表結尾的問題。

我正在處理生物數據(例如 dna 序列)。 假設我們有這樣的東西:

primer = "CATTTTCHACTAAYCATAARGATATTGG"

在每個退化字母(不是 A、C、T 或 G)處,我需要將其替換為另一個字母(A、C、G 或 T)。

-H可以換成A,C或者T
-Y可以換成C或者T
-R可以用A或G代替

理想情況下,我希望我的腳本通過引物序列到 go,在第一個退化字母 (H) 上,通過將 H 替換為 A、C 和 T 來創建三個新序列:

原文:CATTTTC H

        Seq 1: CATTTTC**A**
        Seq 2: CATTTTC**C**
        Seq 3: CATTTTC**T**

並繼續通過。 然后在下一個退化字母 (Y) 處分支並生成更多序列:

    Original Seq 1: CATTTTC**A**CTAA**Y**

           Seq 1.1: CATTTTC**A**CTAA**C**
           Seq 1.2: CATTTTC**A**CTAA**T**

    Original Seq 2: CATTTTC**C**CTAA**Y**

           Seq 2.1: CATTTTC**C**CTAA**C**
           Seq 2.2: CATTTTC**C**CTAA**T**

    Original Seq 3: CATTTTC**T**CTAA**Y**

           Seq 3.1: CATTTTC**T**CTAA**C**
           Seq 3.2: CATTTTC**T**CTAA**T**

                           Etc.....

最后,我想要一個包含所有可能組合的字符串列表。 我將如何 go 這樣做?

嘗試 1:

holdletter = ""  #this is a fake/empty variable
primer = "CATTTTCHACTAAYCATAARGATATTGG"
primerconverted = ""
listOfPrimerConverts = \[\]
listOfPrimerChar = list(primer)

for letter in primer:
  if letter == "H":
  holdletter = letter.replace("H", "A")
  primerconverted + holdletter
  print(primerconverted)

   else continue

\#not sure whats happening below but this is my scratch paper
\#help

for char in listOfPrimerChar:
  if char is "C" or "T" or "A" or "G":
    listOfPrimerConverts.append(char)
      continue

  if char is "H":
    listOfPrimerConverts.append(primerconverted + "A")
    listOfPrimerConverts.append(primerconverted + "C")
    listOfPrimerConverts.append(primerconverted + "T")

嘗試 2:

\#Degenerate Primer Key

H = A, C, or T
V = A, C, or G
N = A, C, T, G
Y = pyrimidines (C or T)
R = A or G
D = A, G, or T)

\#---------------------------------

Primer Identification: COI bcdF01

primer = "CATTTTCHACTAAYCATAARGATATTGG"

print()

print("Primer list: ", list(primer)) #copy output into primer_list

primer_character_list = list(primer)

\#for i in primer:
  print(i)

print()

print("Primer length: ", len(primer));

print()

\#primer_character_list = \['C', 'A', 'T', 'T', 'T', 'T', 'C', 'H', 'A', 'C', 'T', 'A', 'A', 'Y', 'C', 'A', 'T', 'A', 'A', 'R', 'G', 'A', 'T', 'A', 'T', 'T', 'G', 'G'\]

\#primer_character_list\[0\] == position # how do i assign a position to all characters in this list???

print()

cnt = 1
for i in primer:
    for j in i:
       print('position', cnt, end=': ')
       print(j)
       cnt = cnt + 1      

print()

print("Degenerate Primer Characters & Positions")

print()

primer = "CATTTTCHACTAAYCATAARGATATTGG"
letter = 'H'
print("Letter H is at position: ", primer.rfind(letter) +1)

print()

primer = "CATTTTCHACTAAYCATAARGATATTGG"
letter = 'Y'
print("Letter Y is at position: ", primer.rfind(letter) +1)

print()

primer = "CATTTTCHACTAAYCATAARGATATTGG"
letter = 'R'
print("Letter R is at position: ", primer.rfind(letter) +1)

print()

holdletter = ""
primerconverted = primer + holdletter
for letter in primer:
  if letter == "H":
    primer[7] = position7
    #holdletter = letter.replace("H", "A")

    print(primerconverted)

那這個呢

from itertools import product as p

primer = 'CATTTTCHACTAAYCATAARGATATTGG'

rep = {'H': ['A', 'C', 'T'],
'Y': ['C',  'T'],
'R': ['A', 'G']
}

combinations = list(rep.get(i, i) for i in primer)

a = list(p(*combinations))
for comb in a:
    print(''.join(comb))

暫無
暫無

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

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