python - 在列表理解中使用 .rjust() 进行字符串对齐 - 格式化工作不符合预期

标签 python string list formatting alignment

所以,我有这个代码:

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/

相关文章:

c++ - 为什么代码打印所有第一个索引?

java - 如何规避字符串大小限制?

list - 如何在榆树中呈现列表?

python - 继承QAbstrctitemModel、PyQt时使用Lists作为QModelIndex中的internalPointer

python - 搜索 Python 列表

c++ - 将 SWIG 与 C++ 结合使用

python - 如何在 Python 中获取匹配正则表达式的组名?

python - 将不规则的列表字典转换为 pandas 数据框

python - 在maya python中选择子对象

JavaScript 正则表达式 - 必须至少包含 UTF-8 中的任意 2 个字母