这是我之前提出的问题的后续: 在更大的列表中处理可变大小的子列表。
我设法使用 itertools 取出 DNA 片段组,但现在我面临一个不同的问题。
我需要根据这些 DNA 片段组设计引物。通过包括来自不同 DNA 片段的重叠来设计引物。假设我在一个列表中有三个 DNA 片段,片段 A、B 和 C。我需要提取:
- C的最后20个核苷酸(nt)与A的前40个核苷酸(按顺序)连接,
- B 的前 20 个 nt 的反向补码 (RC) 按顺序与 A 的最后一个 nt 的 RC 连接,
- A 的最后 20 nt 与 B 的前 40 nt 连接,
- C 的前 20 nt 的 RC 与 B 的最后 40 nt 的 RC 连接,
- C 的最后 20 nt 与 A 的前 40 nt 连接,
- A 的前 20 nt 的 RC 与 C 的后 40 nt 的 RC 连接。
我似乎无法解决这个问题,而且我不确定从哪里开始最适合我......
到目前为止,我已经编写的代码仅输出“第 1 组”(故意这样,我可以最大限度地减少我正在处理的视觉输出量)。这里是:
#import BioPython Tools
from Bio.Seq import Seq
from Bio.Alphabet import IUPAC
#import csv tools
import csv
import sys
import os
import itertools
with open('constructs-to-make.csv', 'rU') as constructs:
construct_list = csv.DictReader(constructs)
def get_construct_number(row):
return row["Construct"]
def get_strategy(row):
return row["Strategy"]
## construct_list.next()
## construct_number = 1
primer_list = []
## temp_list = []
## counter = 2
groups = []
## for row in construct_list:
## print(row)
##
for key, items in itertools.groupby(construct_list, key=get_construct_number):
for subitems in items:
#here, I am trying to get the annealing portion of the Gibson sequence out
if subitems['Strategy'] == 'Gibson' and subitems['Construct'] == '1':
print(subitems['Construct'])
fw_anneal = Seq(subitems['Sequence'][0:40], IUPAC.unambiguous_dna)
print(fw_anneal)
re_anneal = Seq(subitems['Sequence'][-40:], IUPAC.unambiguous_dna).reverse_complement()
print(re_anneal)
fw_overhang = Seq(subitems['Sequence'][0:20], IUPAC.unambiguous_dna).reverse_complement()
print(fw_overhang)
re_overhang = Seq(subitems['Sequence'][-20:], IUPAC.unambiguous_dna)
print(re_overhang)
任何帮助将不胜感激!