Python:行长可以变化的字符串格式

标签 python string

所以我有下面的脚本:

def single_to_tripple(res):
    aa = {'R':'ARG','H':'HIS','K':'LYS','D':'ASP','E':'GLU','S':'SER','T':'THR','N':'ASN','Q':'GLN','C':'CYS','U':'SEC','G':'GLY','P':'PRO','A':'ALA','I':'ILE','L':'LEU','M':'MET','F':'PHE','W':'TRP','Y':'TYR','V':'VAL'}
    return(aa[res])
seq = 'ASALKDYYAIMGVKPTDDLKTIKTAYRRLARKYHPDVSKEPDAEARFKEVAEAWEVLSDEQRRAEYDQMWQHRNDPQFNRQFHHGDGQSFNAEDFDDIFSSIFGQHARQSRQRPATRGHDIEIEVAVFLEETLTEHKRTISYNLPVYNAFGMIEQEIPKTLNVKIPAGVGNGQRIRLKGQGTPGENGGPNGDLWLVIHIAPHPLFDIVGQDLEIVVPVSPWEAALGAKVTVPTLKESILLTIPPGSQAGQRLRVKGKGLVSKKQTGDLYAVLKIVMPPKPDENTAALWQQLADAQSSFDPRKDWGKA'
length = len(seq)

for i,v in enumerate(xrange(0,len(seq),13)):
    line = seq[v:v+13]
    out_line = ('{:<3} '*13).format(single_to_tripple(line[0]),single_to_tripple(line[1]),single_to_tripple(line[2]),single_to_tripple(line[3]),single_to_tripple(line[4]),single_to_tripple(line[5]),single_to_tripple(line[6]),single_to_tripple(line[7]),single_to_tripple(line[8]),single_to_tripple(line[9]),single_to_tripple(line[10]),single_to_tripple(line[11]),single_to_tripple(line[12]))
    print out_line

我正在使用脚本来拼接 seq每 13 个元素进行字符串化,然后将拼接字符串中的每个元素从其单个字母代码转换为其在 single_to_tripple 中的三字母代码.我的数据输出需要包含由空格分隔的 13 列。如果拼接不包含 13 个元素,则问题会出现在最后一个拼接处。我怎样才能像往常一样捕获它并格式化字符串?

我使用 enumerate在我的 for 循环中,因为稍后我需要添加行号。

我当前的代码输出:

ALA SER ALA LEU LYS ASP TYR TYR ALA ILE MET GLY VAL 
LYS PRO THR ASP ASP LEU LYS THR ILE LYS THR ALA TYR 
ARG ARG LEU ALA ARG LYS TYR HIS PRO ASP VAL SER LYS 
GLU PRO ASP ALA GLU ALA ARG PHE LYS GLU VAL ALA GLU 
ALA TRP GLU VAL LEU SER ASP GLU GLN ARG ARG ALA GLU 
TYR ASP GLN MET TRP GLN HIS ARG ASN ASP PRO GLN PHE 
ASN ARG GLN PHE HIS HIS GLY ASP GLY GLN SER PHE ASN 
ALA GLU ASP PHE ASP ASP ILE PHE SER SER ILE PHE GLY 
GLN HIS ALA ARG GLN SER ARG GLN ARG PRO ALA THR ARG 
GLY HIS ASP ILE GLU ILE GLU VAL ALA VAL PHE LEU GLU 
GLU THR LEU THR GLU HIS LYS ARG THR ILE SER TYR ASN 
LEU PRO VAL TYR ASN ALA PHE GLY MET ILE GLU GLN GLU 
ILE PRO LYS THR LEU ASN VAL LYS ILE PRO ALA GLY VAL 
GLY ASN GLY GLN ARG ILE ARG LEU LYS GLY GLN GLY THR 
PRO GLY GLU ASN GLY GLY PRO ASN GLY ASP LEU TRP LEU 
VAL ILE HIS ILE ALA PRO HIS PRO LEU PHE ASP ILE VAL 
GLY GLN ASP LEU GLU ILE VAL VAL PRO VAL SER PRO TRP 
GLU ALA ALA LEU GLY ALA LYS VAL THR VAL PRO THR LEU 
LYS GLU SER ILE LEU LEU THR ILE PRO PRO GLY SER GLN 
ALA GLY GLN ARG LEU ARG VAL LYS GLY LYS GLY LEU VAL 
SER LYS LYS GLN THR GLY ASP LEU TYR ALA VAL LEU LYS 
ILE VAL MET PRO PRO LYS PRO ASP GLU ASN THR ALA ALA 
LEU TRP GLN GLN LEU ALA ASP ALA GLN SER SER PHE ASP 
Traceback (most recent call last):
  File "make_seq_res.py", line 10, in <module>
    out_line = ('{:<3} '*13).format(single_to_tripple(line[0]),single_to_tripple(line[1]),single_to_tripple(line[2]),single_to_tripple(line[3]),single_to_tripple(line[4]),single_to_tripple(line[5]),single_to_tripple(line[6]),single_to_tripple(line[7]),single_to_tripple(line[8]),single_to_tripple(line[9]),single_to_tripple(line[10]),single_to_tripple(line[11]),single_to_tripple(line[12]))
IndexError: string index out of range

最佳答案

您必须手动输入如此多的变量这一事实应该已经给了您一个提示,即您所做的工作超出了生成该输出所必需的范围。

在不改变原始代码的情况下,可以这样做:

for i,v in enumerate(xrange(0,len(seq),13)):
    line = seq[v:v+13]
    out_line = ' '.join('{:<3}'.format(single_to_tripple(part)) for part in line)
    print out_line

正如 Martijn 指出的那样,三元组始终是三个字符,因此您实际上可以跳过格式化:

out_line = ' '.join(single_to_tripple(part) for part in line)

关于Python:行长可以变化的字符串格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15246851/

相关文章:

python - 动态计算工作日数,不包括 Python 中的假期日历

c# - 向后遍历字符串以查找字符或短语

python - 使用什么方法来确定用户是否连接到 facebook

用于 session 管理的 Python 模块

python - pandas:快速计算具有某些值的列的总和

java - 正则表达式替换 Java 文件中的所有字符串文字

c# - 将 String 转换为 DateTime 时出错。 "String was not recognized as a valid DateTime."

python - Django 中将foreignkey 放在哪里?

string - 为什么不使用 %v 来打印 int 和 string

java - 计算字符串中的特定字符 (Java)