我想用100个DNA序列创建1000个随机组。我有包含100个fasta序列的文本文件(sequence.txt),我希望随机选择包含10个fasta序列的子组进行进一步分析。这是我试过的代码,我遇到了一些错误。
import random
import re
f = open("sequence.txt", "r")
lf = f.split(">")
lf.pop(0)
f.close()
for i in range(10):
sublist = "subset_%s.fas" % i
random_group = random.randrange(len("sequence.txt"), 10)
output = open(sublist, "w")
for m in random_group:
sequence = ">" + lf[m]
output.write(sequence)
output.close()
答案 0 :(得分:4)
结帐random.sample
。它允许您对序列中的k
(在您的情况下为k=10
)元素进行采样(在您的情况下为lf
):
>>> import random
>>> sequences = range(100)
>>> for i in range(1000):
... # Sample a random group
... random_group = random.sample( lf, 10 )
# Output group
...
答案 1 :(得分:0)
您未正确使用random.randrange
:random.randrange(start, stop[, step])
。如果您提供两个值,则它们会变为start
和stop
。您的len("sequence.txt")
已大于10(12)。
为什么len("sequence.txt")
不是len(lf)
? len("sequence.txt")
只是给出了string
的长度。
[random.randrange(0, len(lf)) for i in range(10)]
应该是您想要的,或使用random.sample