.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()
ました。最初の文字ではなく、最も左に配置された文字です。
なぜそのように機能するのですか?どの組み込み関数が出力をフォーマットして、すべての文字を必要に応じて配置できるか-最初の文字を基準にして、画面の最も左側に配置します。