从列表项中删除引号而不将其作为字符串

时间:2017-08-07 19:33:48

标签: python list

我有一个列表:

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迭代地计算一个数字。在列表项中遇到引号时,该函数会出错。

2 个答案:

答案 0 :(得分:0)

而不是使用

打印列表
print(Users)

print("Users = [%s]" % ", ".join(Users))

这会对输出进行格式化,使其看起来像你提到的那样。

答案 1 :(得分:0)

您可以使用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:请注意,范围中应存在类定义Protein__init__期望一个字符串变量作为参数,__repr__函数显示Protein您需要的格式的对象。例如:

class Protein:
    def __init__(self, x):
        self.x = x

    def __repr__(self):
        return 'Protein("%s")' % self.x

注意:在Python代码中使用eval不是一个好习惯。您不应该将它用于实时应用程序,但将其用于家庭工作(如果是这样的话)则可以。请查看:Why is using 'eval' a bad practice?了解详细信息。

编辑:根据OP的评论。而不是使用:

users.append('Protein (" ' +dsspSeqList[i]+ ' ", {"id" : "s' +str(i +1)+ ' "}) ')

你应该使用:

users.append(Protein(dsspSeqList[i], {"id" : "s{}".format(i +1)}))

这样您就不需要eval功能。但 Note 部分仍然适用。