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,我想我今天学到了一些新东西。非常感谢。