Python 比较两个字符串中的值,然后生成可以放入数组中的结果

Python 比较两个字符串中的值,然后生成可以放入数组中的结果,python,arrays,string,compare,Python,Arrays,String,Compare,我在python中有两个字符串已转换为列表: Seq1 = [x1,x2,x3,x4] Seq2 = [y1,y2,y3,y4] 字符串长度相同,仅由字母'a'、'c'、'g'和'u'组成 然后我通过len(Seq2)创建了一个空矩阵len(Seq1): 接下来,我要比较列表值,如果值匹配,则放置一个1,如果值不匹配,则放置一个0。该值应放在相关数组元素中 i、 e 我有一个循环正在工作,但它只填充了第一行和第一列。我可以看出,像Seq1[I]==Seq2[j]这样的范围函数存在问题,但我无

我在python中有两个字符串已转换为列表:

Seq1 = [x1,x2,x3,x4]

Seq2 = [y1,y2,y3,y4]
字符串长度相同,仅由字母
'a'
'c'
'g'
'u'
组成

然后我通过
len(Seq2)
创建了一个空矩阵
len(Seq1)

接下来,我要比较列表值,如果值匹配,则放置一个
1
,如果值不匹配,则放置一个
0
。该值应放在相关数组元素中 i、 e


我有一个循环正在工作,但它只填充了第一行和第一列。我可以看出,像
Seq1[I]==Seq2[j]
这样的范围函数存在问题,但我无法解决它。

我假设这是一个生物信息学问题。然而,我不清楚目的是什么。我列出了一个你可以使用的通用匹配系统

>>> for s1 in xrange(len(seq1)):
...     for s2 in xrange(len(seq2)):
...             if seq1[s1]==seq2[s2]:
...                     a[s1,s2]=1
...             else:
...                     a[s1,s2]=0

迭代两个列表并比较:

for x in range(len(Seq1)):
  for y in range(len(Seq2)):
    a[x, y] = (Seq1[x] == Seq2[y])

编写循环的紧凑方法是:

import itertools

for i1,i2 in itertools.product(xrange(len(Seq1)), xrange(len(Seq2))):
    a[i1,i2] = Seq1[i1] == Seq2[i2]

我根本不会使用嵌套循环;numpy中的外部方法可以为您做到这一点:

Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> seq1 = "acgu"
>>> seq2 = "aagg"
>>> numpy.equal.outer(map(ord, seq1), map(ord, seq2))
array([[ True,  True, False, False],
       [False, False, False, False],
       [False, False,  True,  True],
       [False, False, False, False]], dtype=bool)

嗨,马修。这将是最有建设性的,如果你编辑后,包括你所尝试的代码(即,你在最后提到的不存在的循环),并提出一个问题的基础上。这是辉煌的感谢你这么多!我知道这很简单,我就是想不起来:)你真的不必把它们转换成列表。同样的代码也适用于字符串。
import itertools

for i1,i2 in itertools.product(xrange(len(Seq1)), xrange(len(Seq2))):
    a[i1,i2] = Seq1[i1] == Seq2[i2]
Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> seq1 = "acgu"
>>> seq2 = "aagg"
>>> numpy.equal.outer(map(ord, seq1), map(ord, seq2))
array([[ True,  True, False, False],
       [False, False, False, False],
       [False, False,  True,  True],
       [False, False, False, False]], dtype=bool)