回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>.rjust()是如何工作的?为什么它会将字符相对于前一个字符放置,而不是相对于第一个字符放置(放置在屏幕最左边还是最左边)?</p>
<p>我有一个例子:</p>
<pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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')
</code></pre>
<p>返回:</p>
<pre><code>ATTCGT
|| |
ATCTAT
Score: 2
GATAAATCTGGTCT
|| ||| |
CATTCATCATGCAA
Score: 4
AGCG
| ||
ATCG
Score: 4
ATCG
||||
ATCG
Score: 10
</code></pre>
<p>但我是在一个人的帮助下创造的。早些时候,这段代码没有这几行代码:</p>
<pre><code>prev = -1
relative_similarity = []
for x in similarity:
relative_similarity.append(x - prev)
prev = x
</code></pre>
<p>方法如下:</p>
<pre><code>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)))
</code></pre>
<p>并产生了这个输出:</p>
<pre><code>ATTCGT
|| |
ATCTAT
Score: 2
GATAAATCTGGTCT
| | | | | |
CATTCATCATGCAA
Score: 4
AGCG
| | |
ATCG
Score: 4
ATCG
|| | |
ATCG
Score: 10
</code></pre>
<p>所以我猜,由<code>.rjust()</code>函数处理的字符,相对于前面的字符,放在输出中-不是放在第一个,而是放在最左边的字符。<br/>
为什么会这样?什么内置函数可以格式化输出,使每个字符都按我的需要放置-相对于第一个字符,放置在屏幕最左边。</p>