.rjust()是如何工作的

时间:2012-08-19 17:56:36

标签: python

.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()函数处理的字符相对于之前的字符放在输出中 - 不是第一个,大多数是左边放置的字符。
它为什么这样?什么内置函数可以格式化输出,使每个字符都按照我的需要放置 - 相对于第一个字符,放置在屏幕的左侧。

2 个答案:

答案 0 :(得分:4)

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

print '%-20s%20s' % ('foo', 'bar')

答案 1 :(得分:1)

        str ='Honey'

        print str.rjust(8,'*')

O / p = ***亲爱的

语法

              rjust(w,'fillchar')

w =在

之前放置的字符宽度数

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

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

但是,指定的宽度必须大于原始刺的大小才能执行对齐,所以 'honey'的大小是5,右边的3,你必须把宽度设置为5 + 3 = 8 ,,所以8将由3个字符9移动4乘以等等......