我刚开始学习python来解析一些变体调用格式(VCF)。简短的文件格式是这样的(来自wiki):
我从here看到的一行是:
alleles = set(reduce(lambda x,y:x+y,[re.split('[/|]',v['GT']) for v in indiv_gt.values()]))
if len(alleles) == 1:
return 0
if len(alleles) > 2:
return None
我正在努力理解这个"等位基因= ..."
我的理解是首先迭代字典indiv_gt中的值,这些值将是一堆基因型,如" 1/1"或" 2/2"或" 1/0"。
然后re.split将捕获这些基因型包含" /" " |"并且分裂,使得1/1将变为1,1,1 / 0将变为1/0,依此类推。但我不太确定,不应该" |"在正则表达式中有不同的含义,如果使用它,它应该带有一个转义符号,我认为它会像" / \ |"在搜索模式中,为什么搜索模式中有[]?
然后是一个减少lambda函数,它是否打算加入所有" 0s,1s,2s"拆分后?或算术上添加0s,1s和2s?
最后使用set函数,因此最后只保存唯一的字符。
这是有道理的,因为如果所有字符都只是0,或1或2,那么这将返回0
我希望我的问题对所有人都有意义。现在很困惑。
最好,
答案 0 :(得分:1)
在正则表达式中,字符|
表示“或”,但仅限于在字符子集外使用时。在括号内,它只是意味着自己,不需要逃避。写[/|]
仅表示“|
或/
”。
reduce
将以x
开头,等于序列的第一个元素,然后将重复执行x = f(x, y)
,其中f
是reduce函数参数。在Python中,+
运算符可以处理数字(添加)或字符串(连接)。这意味着减少带有lambda x,y:x+y
的字符串列表会将它们连接起来,减少数字列表将会计算总和。