我正在尝试编写代码来打印出一对字母,一个来自每个字符串中的相同位置,当任一字符串中的字符为“-”或“?”时。
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
。试试看 - 您会爱上它的。
另一个有用的东西是 zip
和 in
操作符,所以我觉得你的代码应该写成这样更好
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/