2

.rjust() 是如何工作的,为什么它将字符相对于前一个字符而不是第一个字符 - 放置在最左侧 - 或屏幕左侧?

我有一个例子:

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


print pairwiseScore("ATTCGT", "ATCTAT"), '\n', '\n', pairwiseScore("GATAAATCTGGTCT", "CATTCATCATGCAA"), '\n', '\n', pairwiseScore('AGCG', 'ATCG'), '\n', '\n', pairwiseScore('ATCG', 'ATCG')

返回:

ATTCGT

||     |

ATCTAT

Score: 2


GATAAATCTGGTCT

 ||  |||  |

CATTCATCATGCAA

Score: 4

AGCG

| ||

ATCG

Score: 4

ATCG

||||

ATCG

Score: 10

但我在一个人的帮助下创建了这个。早些时候,这段代码没有这几行:

prev = -1
relative_similarity = []


for x in similarity:

    relative_similarity.append(x - prev)
    prev = x

该方法如下所示:

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

并产生了这个输出:

ATTCGT

||    |

ATCTAT

Score: 2

GATAAATCTGGTCT

| |    |     |      |         |

CATTCATCATGCAA

Score: 4


AGCG

| |  |

ATCG

Score: 4


ATCG

|| |  |

ATCG

Score: 10

所以我猜到,.rjust()函数处理的字符被放置在输出中,相对于以前的字符 - 不是第一个,最左边的字符。
为什么它会这样工作?什么内置函数可以格式化输出,使每个字符都按我的需要放置 - 相对于第一个字符,放置在屏幕的最左侧。

4

2 回答 2

4

str.rjust() 不会在任何地方放置任何东西;它返回一个全新的字符串,其中包含左侧的旧一加填充。如果由于最终位置可能出现其他文本而要放置更多或更少的填充,那么确保使用较少的填充是您的问题。也许您应该考虑将填充添加推迟到输出阶段,以便可以添加正确的数量。

print '%-20s%20s' % ('foo', 'bar')
于 2012-08-19T18:03:03.893 回答
1
        str ='Honey'

        print str.rjust(8,'*')

O/p = ***亲爱的

句法

              rjust(w,'fillchar')

w = 之前放置的字符宽度数

fillchar = 用于填充宽度的字符,默认为空格..

rjust 是一种右对齐字符串的方法,它在对齐后返回一个新字符串。

但是,指定的宽度必须大于原始字符串的大小才能执行对齐,因此“蜂蜜”的大小为 5,要右对齐 3,您必须将宽度设置为 5+3=8,因此 8 将移动3 个字符 9 x 4 等等...

于 2014-05-20T07:56:40.053 回答