所以,我有这个代码:
def pairwiseScore(seqA, seqB):
score = 0
length = len(seqA)
similarity = []
for x in xrange(length):
if seqA[x] == seqB[x]:
if (x >= 1) and (seqA[x - 1] == seqB[x - 1]):
score += 3
similarity.append(x)
else:
score += 1
similarity.append(x)
else:
score -= 1
return ''.join((seqA, '\n', ''.join(['|'.rjust(x) for x in similarity]), '\n', seqB, '\n', 'Score: ', str(score)))
这旨在成为 this exercise 的解决方案.
它的效果几乎很好,但是,当我执行时:
print pairwiseScore("ATTCGT", "ATCTAT"), '\n', '\n', pairwiseScore("GATAAATCTGGTCT", "CATTCATCATGCAA")
我得到这个输出:
ATTCGT
|| |
ATCTAT
Score: 2
GATAAATCTGGTCT
| | | | | |
CATTCATCATGCAA
Score: 4
正如您所看到的,这些管道(或竖线)格式不正确。
它应该看起来像这样:
>>> print pairwiseScore("ATTCGT", "ATCTAT")
ATTCGT
|| |
ATCTAT
Score: 2
>>> print pairwiseScore("GATAAATCTGGTCT", "CATTCATCATGCAA")
GATAAATCTGGTCT
|| ||| |
CATTCATCATGCAA
Score: 4
>>>
我的问题是:
这有什么问题:
''.join(['|'.rjust(x) for x in similarity]
功能?我必须如何编辑它,以使这些管道在输出时格式正确? 干杯!
最佳答案
您的相似度值是条形的绝对位置,但是您使用 rjust() 函数的方式,应该传递相对于前一个位置的位置。
例如,您可以在函数的底部执行此操作:
prev = -1
relative_similarity=[]
for x in similarity:
relative_similarity.append(x-prev)
prev=x
return ''.join((seqA, '\n', ''.join(['|'.rjust(x) for x in relative_similarity]), '\n', seqB, '\n', 'Score: ', str(score)))
关于python - 在列表理解中使用 .rjust() 进行字符串对齐 - 格式化工作不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019618/