Python 如何将字符串分隔为多行单个字符

Python 如何将字符串分隔为多行单个字符,python,string,Python,String,我不确定这个问题的标题是否合适,所以欢迎任何人编辑它。谢谢大家! 我的问题是如果我有一串蛋白质序列: seq='MIGQFGL' 如何将其转换为以下内容: MET 1 ILE 2 GLY 3 GLN 4 PHE 5 GLY 6 LEU 7 这就是我尝试过的: f= open("protein.seq", "w") seq = 'MIGQFGL' d = {'C': 'CYS', 'D': 'ASP', 'S': 'SER', 'Q': 'GLN', 'K': 'LYS', 'I': 'IL

我不确定这个问题的标题是否合适,所以欢迎任何人编辑它。谢谢大家!

我的问题是如果我有一串蛋白质序列:

seq='MIGQFGL'

如何将其转换为以下内容:

MET 1
ILE 2
GLY 3
GLN 4
PHE 5
GLY 6
LEU 7
这就是我尝试过的:

f= open("protein.seq", "w")
seq = 'MIGQFGL'

d = {'C': 'CYS', 'D': 'ASP', 'S': 'SER', 'Q': 'GLN', 'K': 'LYS',
 'I': 'ILE', 'P': 'PRO', 'T': 'THR', 'F': 'PHE', 'N': 'ASN',
 'G': 'GLY', 'H': 'HIS', 'L': 'LEU', 'R': 'ARG', 'W': 'TRP',
 'A': 'ALA', 'V':'VAL', 'E': 'GLU', 'Y': 'TYR', 'M': 'MET'}

sp = list(seq)
rep = '\n'.join(d.get(e,e) for e in sp) #to replace the items in list 'sp' with corresponding dictionary values

no = list(range(1,8))
n = '\n'.join(str(x) for x in no)

line = "{}\t{}\n".format(rep,n)
f.write(line)
但我得到的是:

MET
ILE
GLY
GLN
PHE
GLY
LEU 1
2
3
4
5
6
7
所以,我改变了这一行:

line = "{}\t{}\n".format(rep,n) 
致:

但我得到了:

Traceback (most recent call last):
  File "protein.py", line 15, in <module>
    line = "{}\t{}\n".format(zip(rep,n))
IndexError: tuple index out of range
回溯(最近一次呼叫最后一次):
文件“protein.py”,第15行,在
line=“{}\t{}\n”。格式(zip(rep,n))
索引器错误:元组索引超出范围
我做错了什么?提前谢谢

注意:我使用Python 3。

您非常接近:

result = '\n'.join(f"{d.get(e,e)} {i}" for i, e in enumerate(seq, 1))
  • 您可以立即迭代字符串的各个字符
  • enumerate(seq,i)
    是一个迭代器,它以
    ((i,seq[0]),(i+1,seq[0+1]),…)的形式生成值。
您非常接近:

result = '\n'.join(f"{d.get(e,e)} {i}" for i, e in enumerate(seq, 1))
  • 您可以立即迭代字符串的各个字符
  • enumerate(seq,i)
    是一个迭代器,它以
    ((i,seq[0]),(i+1,seq[0+1]),…)的形式生成值。

    • 希望你能找到像这样的东西

      [{i+1,j} for i,j in enumerate(list(seq))]
      
      结果:

      [set([1, 'M']), set(['I', 2]), set([3, 'G']), set(['Q', 4]), set([5, 'F']), set([6, 'G']), set(['L', 7])]
      

      希望你能找到像这样的东西

      [{i+1,j} for i,j in enumerate(list(seq))]
      
      结果:

      [set([1, 'M']), set(['I', 2]), set([3, 'G']), set(['Q', 4]), set([5, 'F']), set([6, 'G']), set(['L', 7])]
      

      请尝试以下代码的小补丁:

      f= open("protein.seq", "w")
      seq = 'MIGQFGL'
      
      d = {'C': 'CYS', 'D': 'ASP', 'S': 'SER', 'Q': 'GLN', 'K': 'LYS',
       'I': 'ILE', 'P': 'PRO', 'T': 'THR', 'F': 'PHE', 'N': 'ASN',
       'G': 'GLY', 'H': 'HIS', 'L': 'LEU', 'R': 'ARG', 'W': 'TRP',
       'A': 'ALA', 'V':'VAL', 'E': 'GLU', 'Y': 'TYR', 'M': 'MET'}
      
      sp = list(seq)
      rep = [d.get(e,e) for e in sp] #to replace the items in list 'sp' with corresponding dictionary values
      
      no = list(range(1,8))
      n = [str(x) for x in no]
      
      line = '\n'.join([e[0]+"  "+e[1] for e in zip(rep,n)])
      f.write(line)
      

      请尝试以下代码的小补丁:

      f= open("protein.seq", "w")
      seq = 'MIGQFGL'
      
      d = {'C': 'CYS', 'D': 'ASP', 'S': 'SER', 'Q': 'GLN', 'K': 'LYS',
       'I': 'ILE', 'P': 'PRO', 'T': 'THR', 'F': 'PHE', 'N': 'ASN',
       'G': 'GLY', 'H': 'HIS', 'L': 'LEU', 'R': 'ARG', 'W': 'TRP',
       'A': 'ALA', 'V':'VAL', 'E': 'GLU', 'Y': 'TYR', 'M': 'MET'}
      
      sp = list(seq)
      rep = [d.get(e,e) for e in sp] #to replace the items in list 'sp' with corresponding dictionary values
      
      no = list(range(1,8))
      n = [str(x) for x in no]
      
      line = '\n'.join([e[0]+"  "+e[1] for e in zip(rep,n)])
      f.write(line)
      

      使用
      enumerate
      将得到您想要的

      rep = '\n'.join('{0} {1}'.format(d.get(s,s), i+1) for i, s in enumerate(seq))
      
      另外,最好在处理文件时使用
      ,因为这样更安全、更整洁。即

      with open('proteins.seq', 'w') as f:
          f.write(rep)
      

      使用
      enumerate
      将得到您想要的

      rep = '\n'.join('{0} {1}'.format(d.get(s,s), i+1) for i, s in enumerate(seq))
      
      另外,最好在处理文件时使用
      ,因为这样更安全、更整洁。即

      with open('proteins.seq', 'w') as f:
          f.write(rep)
      

      这些数字是什么?它们只是随着每一行的增加而增加吗?您的代码非常接近,但应该有其他方法来做到这一点!!这些数字是什么?它们只是随着每一行的增加而增加吗?您的代码非常接近,但应该有其他方法来做到这一点!!当我试图
      打印(结果)
      时,我得到了一个语法错误:这段代码的语法无效。我得到了这个错误:
      文件“protein.py”,第10行result='\n'。在枚举(seq,1)中为I,e加入(f{d.get(e,e)}{I}^语法无效
      @Cave,然后你应该升级你的Python安装以获得对f-strings的访问。从未听说过f-strings,我想我今天学到了一些新东西。非常感谢。当我试图
      打印(结果)
      时,我得到了一个语法错误:这段代码的语法无效。我得到了这个错误:
      文件“protein.py”,第10行result='\n'。在枚举(seq,1)中为I,e加入(f{d.get(e,e)}{I}^语法无效
      @Cave,然后你应该升级你的Python安装以获得对f-strings的访问。从未听说过f-strings,我想我今天学到了一些新东西。非常感谢。