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

しかし、私はこれを 1 人の助けを借りて作成しました。以前は、このコードには次の数行が欠けていました。

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 に答える