Python 将循环中创建的每个序列与上一个序列进行比较
我在python中创建了一个函数,随机生成核苷酸序列:Python 将循环中创建的每个序列与上一个序列进行比较,python,Python,我在python中创建了一个函数,随机生成核苷酸序列: import random selection60 = {"A":20, "T":20, "G":30, "C":30} sseq60=[] for k in selection60: sseq60 = sseq60 + [k] * int(selection60[k]) random.shuffle(sseq60) for i in range
import random
selection60 = {"A":20, "T":20, "G":30, "C":30}
sseq60=[]
for k in selection60:
sseq60 = sseq60 + [k] * int(selection60[k])
random.shuffle(sseq60)
for i in range(100):
random.shuffle(sseq60)
def generateSequence(self, length):
length = int(length)
sequence = ""
while len(sequence) < length:
sequence="".join(random.sample(self, length))
return sequence[:length]
随机导入
选择60={A:20,T:20,G:30,C:30}
sseq60=[]
对于selection60中的k:
sseq60=sseq60+[k]*int(选择60[k])
随机洗牌(sseq60)
对于范围(100)内的i:
随机洗牌(sseq60)
def生成序列(自身、长度):
长度=整数(长度)
sequence=“”
而len(序列)<长度:
sequence=“.join(随机样本(自身,长度))
返回序列[:长度]
现在,我想检查一下,当我应用此函数时,如果新创建的序列与以前的序列的相似性大于10%,则删除该序列并创建一个新序列:
我写了这样的东西:
lst60=[]
newSeq=[]
for i in range(5):
while max_identity < 10:
newSeq=generateSequence(sseq60,100)
identity[i] = [newSeq[i] == newSeq[i] for i in range(len(newSeq[i]))]
max_identity[I]=100*sum(identity[i]/length(identity[i])
lst60.append(newSeq)
print(len(lst60))
lst60=[]
newSeq=[]
对于范围(5)中的i:
当最大值小于10时:
newSeq=生成序列(SSEQ60100)
标识[i]=[newSeq[i]==newSeq[i]表示范围内的i(len(newSeq[i]))
最大单位[I]=100*和(单位[I]/长度(单位[I])
lst60.追加(newSeq)
打印(len(lst60))
然而,似乎我得到了一个空列表如果你想比较所有1的
I
th序列和j
th序列,你必须使用嵌套的for循环。记住,当你创建一个新列表时,lst60[-1]
总是包含最后一个元素。注意,你的第6行有一个条件newSeq[I]==newSeq[I]
,这将永远是真的。两条注释。1.什么是标识
?它是一个列表、字符串还是一个整数?它最初大于10吗?2.newSeq[i]==newSeq[i]
这将永远是真的。@TimRoberts是的,我注意到了,这就是为什么我使用append(),是的,我认为newSeq[i]==newSeq[i]不是正确的写入方式,我如何写入新创建的序列与循环中的前一个序列进行比较?@DeepakGouda identity是在将每个序列与循环中的前一个序列进行比较时应生成的最大值。基本上,循环中5个序列是使用该函数创建的,我希望对序列2进行比较d到序列1和序列3,与序列1和2进行比较,依此类推到序列5,与1,2,3,4PS进行比较:函数getSimilarity
的工作原理是假设两个序列的长度相同。是的,这也是我的想法,要有一个新的函数来进行比较,谢谢e getSimilarity(newSeq[I],newSeq[j])?同样,这个循环似乎让我们感到很奇怪。