【问题标题】:How to turn a 'string list' into a real list?如何将“字符串列表”变成真正的列表?
【发布时间】:2013-04-29 15:36:12
【问题描述】:

我正在打开一个.txt 文件,并且必须使用其中的一个列表来执行我正在编写的函数。这是文本文件中给出的列表之一:

'[24, 72, 95, 100, 59, 80, 87]\n'

使用.strip()它摆脱了\n,所以它变成:

'[24, 72, 95, 100, 59, 80, 87]'

我认为使用 split 是没用的,因为使用 split(' ') 会产生:

['[24, 72, 95, 100, 59, 80, 87]']

我认为这只会加深复杂性。将这个“字符串列表”转换为可以使用 for 循环的真实列表的有效方法是什么?我已经尝试了几个小时了,还是搞不明白。

【问题讨论】:

  • 这种情况下可以使用eval
  • 另一种方式可能是 json.load 和转储。您使用 json.dump 创建文件并使用它读取它 json.load
  • .split(' ') 应该产生了['[24,','72,','95,','100,','59,','80,','87]']

标签: python python-2.7


【解决方案1】:

一个答案已经被接受,但我只是想添加这个作为记录。 json 模块非常适合这种事情:

import json
s = '[24, 72, 95, 100, 59, 80, 87]\n'
lst = json.loads(s)

【讨论】:

    【解决方案2】:

    你可以使用ast.literal_eval:

    In [8]: strs='[24, 72, 95, 100, 59, 80, 87]\n'
    
    In [9]: from ast import literal_eval
    
    In [10]: literal_eval(strs)
    Out[10]: [24, 72, 95, 100, 59, 80, 87]
    

    关于ast.literal_eval的帮助:

    In [11]: literal_eval?
    Type:       function
    String Form:<function literal_eval at 0xb6eaf6bc>
    File:       /usr/lib/python2.7/ast.py
    Definition: literal_eval(node_or_string)
    Docstring:
    Safely evaluate an expression node or a string containing a Python
    expression.  The string or node provided may only consist of the following
    Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
    and None.
    

    【讨论】:

    • 当我使用默认的 Idle shell 时,它工作正常,但是当我在它外面醒来时,比如在我正在处理的文件夹中,它返回错误“没有名为 ast 的模块”
    • @HaileyMonette python 版本?
    • 其实你是对的,出于某种原因,Idle 2.5 运行而不是 2.7.3,但是这个解决方案确实有效,非常感谢!
    • @HaileyMonette 这是在 py2.6 中引入的。
    【解决方案3】:

    使用ast.literal_eval:

    strs='[24, 72, 95, 100, 59, 80, 87]\n'
    list_of_strs = ast.literal_eval(strs)
    

    进一步的帮助,发表评论....

    【讨论】:

      【解决方案4】:

      你不需要为此导入任何东西

      s = '[24, 72, 95, 100, 59, 80, 87]'

      s.translate(None, '[]').split(', ') 会给你一个字符串数字列表

      如果您想要整数列表,请尝试

      [int(i) for i in s.translate(None, '[]').split(', ')]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 2013-12-13
        相关资源
        最近更新 更多