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

2024-10-01 15:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有这个代码:

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的解决方案。在

它几乎可以工作,但是,当我执行:

^{pr2}$

我得到这个输出:

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]

功能?我如何编辑它,使那些管道在输出时格式良好? 干杯!在


Tags: inforiflengthscorejoinsimilarityseqa
2条回答

所以,多亏了Vaughn Cato,我找到了解决方案。使用您的几行代码,我的方法最终成功了,但没有通过最后一个测试用例->;enter image description here

这就是密码:

def pairwiseScore(seqA, seqB):

    prev = -1
    score = 0
    length = len(seqA)
    similarity = []
    relative_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

    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)))

所以我修改了你的例子,然后做了这样的:

^{pr2}$

这段代码通过了s3-q11练习中的所有测试用例。所以,我想我找到了解决办法,我完成了。在

感谢和干杯:)

您的相似度值是条形图的绝对位置,但是使用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)))

相关问题 更多 >

    热门问题