Python 从列表项中删除引号,而不使其成为字符串
我有这样一个清单:Python 从列表项中删除引号,而不使其成为字符串,python,list,Python,List,我有这样一个清单: Users = ['Protein("SAHDSJDSFJH"), {"id": "s1"}', 'Protein("ACGTWZJSFNM"), {"id": "s2"}', 'Protein("ABHZZEQTAAB"), {"id": "s3"}'] 我想要与以下内容相同的列表: Users = [Protein("SAHDSJDSFJH"), {"id": "s1"}, Protein("ACGTWZJSFNM"
Users = ['Protein("SAHDSJDSFJH"), {"id": "s1"}',
'Protein("ACGTWZJSFNM"), {"id": "s2"}',
'Protein("ABHZZEQTAAB"), {"id": "s3"}']
我想要与以下内容相同的列表:
Users = [Protein("SAHDSJDSFJH"), {"id": "s1"},
Protein("ACGTWZJSFNM"), {"id": "s2"},
Protein("ABHZZEQTAAB"), {"id": "s3"}]
在不将第二个列表作为字符串的情况下,我只希望从列表项中删除单引号。因为,我将它解析为python中的一个库,以使用ID迭代计算一个数字。函数在列表项中遇到引号时出错 而不是使用
print(Users)
试一试
这将格式化输出,使其看起来像您提到的那样。您可以使用以下列表,使用map
和eval(…)
作为:
import ast
Users = ['Protein("SAHDSJDSFJH"), {"id": "s1"}',
'Protein("ACGTWZJSFNM"), {"id": "s2"}',
'Protein("ABHZZEQTAAB"), {"id": "s3"}']
new_list = [y for x in map(eval, Users) for y in x]
其中new_list
将保存以下值:
[Protein("SAHDSJDSFJH"), {'id': 's1'},
Protein("ACGTWZJSFNM"), {'id': 's2'},
Protein("ABHZZEQTAAB"), {'id': 's3'}]
PS:请注意,在其\uuuu init\uuuuuu
需要一个字符串变量作为参数的作用域中,应该存在一个类定义Protein
,并且\uuuu repr\uuuuu
函数以您需要的格式显示Protein
的对象。例如:
class Protein:
def __init__(self, x):
self.x = x
def __repr__(self):
return 'Protein("%s")' % self.x
注意:在Python代码中使用eval
不是一种好的做法。您不应该在实时应用程序中使用它,但是在家庭工作中使用它是可以的(如果是这样的话)。请看:了解详细信息
根据OP的评论编辑:。而不是使用:
users.append('Protein (" ' +dsspSeqList[i]+ ' ", {"id" : "s' +str(i +1)+ ' "}) ')
您应该使用:
users.append(Protein(dsspSeqList[i], {"id" : "s{}".format(i +1)}))
这样,您就不需要
eval
函数。但请注意,部分仍然适用。如果您打印这些,您将看不到引号,它们已经是字符串了。引号只是用来表示它们的类型;它们只是用来将已经在引号中的内容括起来。可能重复您如何使用列表,以及为什么它的成员是否显示为引号(表示字符串文字)相关?在我看来,这就像一个字符串。@Chris我已经编辑了这个问题,这使得它是一个字符串。。。OP问了一个毫无意义的问题,这使它成为一个字符串。我希望它仍然是一个列表。@shalini如果你想让它成为一个列表,那么你的问题就没有意义了。引号只是显示python认为列表包含的数据类型。删除引号的唯一方法是显示列表的内容。我不相信ast.literal\u eval
会理解蛋白质(…)
。@Chris:是的。我们应该在这里使用eval
。更新了答案。谢谢请注意,eval()
通常不是一个安全的函数。如果有任何方法来修正输入值,它将比这个解决方案更好。是的,这是真的谢谢@这解决了我的问题。耶耶
users.append(Protein(dsspSeqList[i], {"id" : "s{}".format(i +1)}))