python - 打印两个字符串中同一位置不同的特定字符

标签 python bioinformatics

我正在尝试编写代码来打印出一对字母,一个来自每个字符串中的相同位置,当任一字符串中的字符为“-”或“?”时。

ref_seq = "AGGTCATCAGGGAAA??TCTAGAACCC"
map_seq = "AGGTCTTCAAAAAAAGG---G"

#defining which sequence is longer/shorter
longest_seq = map_seq 
shortest_seq = ref_seq
if len(ref_seq) > len(map_seq):
    longest_seq == ref_seq
    shortest_seq == map_seq
#adding on characters to shortest sequence to make sequences same length
x = len(longest_seq) - len(shortest_seq)
shortest_seq += ("$" * x)

#printing out sites with gaps or unknown bases
print "sites with gaps or unknown bases"
for i in range(len(longest_seq)):   
    if longest_seq[i] == "-" or "?":
        print (i+1), longest_seq[i], shortest_seq[i]
    elif shortest_seq[i] == "-" or "?":
        print (i+1), longest_seq[i], shortest_seq[i]

我的代码打印出所有网站,而不仅仅是网站是“?”的地方或者 ”-”。有人可以解释我如何编辑我的代码,以便只有带有“?”的网站吗?或“-”被打印?

第一段代码工作正常,但我包括解释我正在使用的变量,问题在 #printing out sites with gaps or unknown bases 之后开始。

我是初学者,所以解释确实可以帮助我提高。我认为这可能与我的 for 循环中的“if”elif“有关,但我不确定。

最佳答案

您的问题只是在您的 if 命令中缺少括号,以及对 or 运算符的误解,因为 或“?” 始终为真,无论左侧是什么。

为了清楚起见,您的命令应该如下所示

if (longest_seq[i] == "-") or (longest_seq[i] == "?"):

不过,我认为你仍然可以做一些改进。

最明显的事情之一是:不要在 python 中执行 for x in range(len(whatever))。为此,您有 enumerate。试试看 - 您会爱上它的。
另一个有用的东西是 zipin 操作符,所以我觉得你的代码应该写成这样更好

ref_seq = "AGGTCATCAGGGAAA??TCTAGAACCC"
map_seq = "AGGTCTTCAAAAAAAGG---G"

for i, (r, m) in enumerate(zip(ref_seq, map_seq)):   
    if (r in "-?") or (m in "-?"):
        print (i+1), r, m

关于python - 打印两个字符串中同一位置不同的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949018/

相关文章:

Python MYSql.connector不会插入数据

python - 如何搜索项目集合是否在列表中?

python - ruby 的 string inspect() 在 python 中的等价物是什么

python - 如何在 Selenium 中保存浏览器 session ?

python - Django 模板 - 嵌套字典迭代

optimization - 如何消除字符串遍历和列表理解中的成本中心

r - 如何创建变量并将其应用于列?

python - BioPython:如何将氨基酸字母表转换为

python - 在数据类中创建类变量的正确方法

python - 如何优化这个 numpy 代码以使其更快?