【问题标题】:Remove quotes from list items without making it a string从列表项中删除引号而不使其成为字符串
【发布时间】:2018-01-15 04:54:58
【问题描述】:

我有一个类似的列表:

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

【问题讨论】:

  • 如果你把这些打印出来,你将看不到引号,它们已经是字符串了。引号只是为了说明它们的类型。
  • 如果您担心引号是字符串的一部分,那么它们不是;它们只是用来将引号内的内容括起来。
  • 你是如何使用列表的,为什么它的成员是否用引号显示(表示字符串文字)是相关的?这在我看来就像XY problem
  • @Chris 我已经编辑了问题

标签: python list


【解决方案1】:

您可以在下面使用mapeval(...) 作为列表理解

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:请注意,在其__init__ 需要一个字符串变量作为参数的范围内应该存在一个类定义Protein,并且__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 函数了。但注意部分仍然适用。

【讨论】:

  • 我不相信ast.literal_eval 会在这里理解Protein(…)
  • @Chris:哦,是的。我们应该在这里使用eval。更新了答案。谢谢!
  • 请注意eval() 通常不是一个安全的函数。如果有任何方法可以修复输入值,则最好使用此解决方案。
  • 是的,这是真的
  • 谢谢。 @MoinuddinQuadri 这解决了我的问题。 YAAYY
【解决方案2】:

而不是像列表一样打印

print(Users)

试试

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

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

【讨论】:

  • 这使它成为一个字符串... OP问了一个毫无意义的问题。
  • 这使它成为一个字符串。我希望它仍然是一个列表。
  • @shalini 如果您正在寻找它作为列表,那么您的问题没有意义。引号仅显示 python 认为您的列表包含的数据类型。删除引号的唯一方法是尝试显示列表的内容。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
相关资源
最近更新 更多