我需要帮助理解一个函数,我想使用它,但我不确定它的某些部分是做什么的。我理解这个函数是从Fasta文件中读取字典创建函数。据我所知,这应该生成前缀和后缀字典,最终扩展contigs(重叠的DNA序列)。
代码:
def makeSuffixDict(reads, lenSuffix = 20, verbose = True):
lenKeys = len(reads[0]) - lenSuffix
dict = {}
multipleKeys = []
i = 1
for read in reads:
if read[0:lenKeys] in dict:
multipleKeys.append(read[0:lenKeys])
else:
dict[read[0:lenKeys]] = read[lenKeys:]
if verbose:
print("\rChecking suffix", i, "of", len(reads), end = "", flush = True)
i += 1
for key in set(multipleKeys):
del(dict[key])
if verbose:
print("\nCreated", len(dict), "suffixes with length", lenSuffix, \
"from", len(reads), "Reads. (", len(reads) - len(dict), \
"unambigous)")
return(dict)
额外信息:reads = readFasta("smallReads.fna", verbose = True)
这是调用该函数的方法:
if __name__ == "__main__":
reads = readFasta("smallReads.fna", verbose = True)
suffixDicts = makeSuffixDicts(reads, 10)
The smallReads.fna文件包含碱基(Dna)字符串:
这是我不理解的部分:"> 读取1
TTATGAATATTACGCAATGGACGTCCAAGGTACAGCGTATTTGTACGCTA
"> 读取2
AACTGCTATCTTTCTTGTCCACTCGAAAATCCATAACGTAGCCCATAACG
"> 读取3
TCAGTTATCCTATATACTGGATCCCGACTTTAATCGGCGTCGGAATTACT
lenKeys = len(reads[0]) - lenSuffix
[0]的值是什么意思?据我所知,“len”返回列表中的元素数。为什么“reads”自动成为一个列表?编辑:似乎可以将Fasta文件声明为列表。有人能确认吗?
if read[0:lenKeys] in dict:
这是否意味着“从0到‘lenKeys’”?对该值仍感到困惑。
在另一个函数中有一条类似的语句:if read[-lenKeys:] in dict:
“-”是什么作用?
def makeSuffixDict(reads, lenSuffix = 20, verbose = True):
这里我不理解参数是什么意思:怎么可能把reads
作为一个参数?在该函数中,lenSuffix = 20
除了从len(reads[0])
中减去一个值以外,还有其他的含义吗?
verbose是什么?我已经读到过"verbose-mode"可以忽略空格,但我从没见过它被用作一个参数并随后用作一个变量。
makeSuffixDict
函数期望reads
实际上是一个列表(如果你不传递一个列表,它将无法工作)。你有关于这个函数的文档,指定它的要求吗? - Greg Hewgillread[:lenKeys]
的意思是“从read
中取出索引号为lenKeys
之前的所有内容”。同样地,read[-lenKeys]
只是一个索引,但使用了负数操作符。所以,“从read
的末尾开始往前数lenKeys
个对象”。 - a p