解释几个python脚本

时间:2014-03-14 22:30:18

标签: python

我刚开始学习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

我希望我的问题对所有人都有意义。现在很困惑。

最好,

1 个答案:

答案 0 :(得分:1)

  1. 在正则表达式中,字符|表示“或”,但仅限于在字符子集外使用时。在括号内,它只是意味着自己,不需要逃避。写[/|]仅表示“|/”。

  2. reduce将以x开头,等于序列的第一个元素,然后将重复执行x = f(x, y),其中f是reduce函数参数。在Python中,+运算符可以处理数字(添加)或字符串(连接)。这意味着减少带有lambda x,y:x+y的字符串列表会将它们连接起来,减少数字列表将会计算总和。