Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 识别整数列表中的保守序列_Python_Bioinformatics - Fatal编程技术网

Python 识别整数列表中的保守序列

Python 识别整数列表中的保守序列,python,bioinformatics,Python,Bioinformatics,我有整数列表: [[1,2,3,4,5,6,7,8,9], [1,2,-7,-6,-5,-4,-3,10,11,12], [3,4,-5,6,7,8,11,12,2,2], [etc]] 在每个列表中可以找到0、1或多次数字 符号可以是负数 我需要找到保存在所有列表中的图案。在这里,结果只有一个图案(我手动找到): 所谓“motif”,我指的是在所有列表中找到的一系列数字(至少2位):例如,在这里,数字3、4、5、6、7在所有列表中都以这种连续顺序找到,尽管在

我有整数列表:

   [[1,2,3,4,5,6,7,8,9],
    [1,2,-7,-6,-5,-4,-3,10,11,12],
    [3,4,-5,6,7,8,11,12,2,2],
    [etc]]
  • 在每个列表中可以找到0、1或多次数字
  • 符号可以是负数
我需要找到保存在所有列表中的图案。在这里,结果只有一个图案(我手动找到):

所谓“motif”,我指的是在所有列表中找到的一系列数字(至少2位):例如,在这里,数字3、4、5、6、7在所有列表中都以这种连续顺序找到,尽管在第二个列表中顺序相反。 理想情况下,对基序的检测将允许少量差异

有什么想法吗


我认为使用networkX可以帮助我识别“派系”,但我没有找到一个函数可以帮助我解决这个问题。

您可以首先根据子列表的绝对值在所有子列表之间找到一个交集,然后在所有子列表上循环并找到所需的交集:

def find_intersection(m_list):
        temp=[map(abs,i) for i in m_list]
        v=set(temp[0])
        for k in temp[1:]:
            v=v.intersection(k)

        for i,k in enumerate(m_list):
            m_list[i]={t for t in k if abs(t) in v}

        return m_list


l=[[1, 2, -3, 4, -5, 6, 7, 8, 9], [1, 2, -7, -6, -5, -4, -3, 10, 11, 12], [3, 4, -5, 6, 7, 8, 11, 12, 2, 2]]

print find_intersection(l)
结果:

[set([2, 4, 6, 7, -5, -3]), set([2, -7, -6, -5, -4, -3]), set([2, 3, 4, 6, 7, -5])]
a你的名单是什么

In [78]: b=[[abs(i) for i in elem] for elem in a]

In [81]: c=list(set.intersection(*map(set, b)))


In [84]: [list({i for i in elem if abs(i) in c}) for elem in a]
Out[84]: [[2, 3, 4, 5, 6, 7], [2, -7, -6, -5, -4, -3], [3, 4, -5, 6, 7,  2]]

请定义你所说的保存的motif是什么意思。如果你能解释一下你是如何从输入中得到输出的,那也很好?你到目前为止所做的事情这个问题看起来像是一个家庭作业,而不是一个实际的应用程序。@FreekWiekmeijer获得家庭作业帮助没有什么错,所以,甚至还有一个标签。不过,OP你应该在提问的同时发布一个。这是一个吗?@FreekWiekmeijer谢谢你的评论。这不是一个家庭作业,而是一个我已经尝试解决了将近一周的问题。现在我有了一个类似的解决方案,但在他的预期输出中,每个子列表中没有2个。他说这不是序列的一部分……它出现在后一个序列中,但在同一个序列中list@Ajay可能2不会出现在其他列表中@卡斯拉,谢谢你。交叉列表也是我的第一个想法,但当我试图识别数字位于同一相对位置的子列表时,我陷入了困境order@Ajay事实上,数字的顺序很重要。如果我们有[1,2,3,4,5,6,7,2,8,9],[1,2,-7,-6,-5,-4,-3,10,11,12],[3,4,-5,6,7,2,8,11,12,2],[etc],那么2就是主题的一部分
In [78]: b=[[abs(i) for i in elem] for elem in a]

In [81]: c=list(set.intersection(*map(set, b)))


In [84]: [list({i for i in elem if abs(i) in c}) for elem in a]
Out[84]: [[2, 3, 4, 5, 6, 7], [2, -7, -6, -5, -4, -3], [3, 4, -5, 6, 7,  2]]