.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()
函数处理的字符,相对于前面的字符,放在输出中-不是放在第一个,而是放在最左边的字符。
为什么会这样?什么内置函数可以格式化输出,使每个字符都按我的需要放置-相对于第一个字符,放置在屏幕最左边。
O/p=***亲爱的
语法
w=要放在前面的字符宽度数
fillchar=要填充宽度的字符,默认值为空格。。
rjust是一个右对齐字符串的方法,它在对齐后返回一个新字符串。
但是,指定的宽度必须大于原始刺的大小才能进行调整,因此 “蜂蜜”的大小是5,要用3右对齐,必须将宽度设为5+3=8,所以8将移动3个字符9乘4,依此类推。。。
str.rjust()
不在任何地方放置任何内容;它返回一个全新的字符串,其中包含旧字符串和左侧的填充。如果由于最终位置中可能出现的其他文本而希望或多或少地填充,那么确保使用较少的填充将是您的问题。也许您应该考虑将填充的添加推迟到输出阶段,以便它可以添加正确的量。相关问题 更多 >
编程相关推荐