【问题标题】:Convert string of listcomp to listcomp using literal_eval使用 literal_eval 将 listcomp 的字符串转换为 listcomp
【发布时间】:2021-07-19 20:13:22
【问题描述】:

我正在尝试将列表理解(用户输入)的字符串转换为实际的列表理解。我正在使用来自 AST 的 literal_eval。

fruits = ['apple', 'orange']
l1 = '[ele for ele in fruits]'
l2 = literal_eval(l1)
print(l2, type(l2))

如果 l1 是列表的字符串,这将有效,但如果它是 listcomp 的字符串,则无效。如果我只使用 eval() 我会在理解后得到列表,['apple','orange']。我希望把 [ele for ele in fruits] 作为一门课。

【问题讨论】:

  • 您不能使用literal_eval() 执行此操作。顾名思义,它仅用于评估 literals。列表推导不是文字。
  • “listcomp”不是对象,也不是对象字面量,因此literal_eval 按设计不起作用。使用eval?

标签: python string type-conversion list-comprehension


【解决方案1】:

Python 和一般来说类似的语言可以被认为具有解析和执行两种模式。如果您处于执行模式(您的源代码已被解析),您必须eval 才能返回解析模式。这告诉它它之前认为的字符串是特殊的,并且它是代码。

eval 是正确的,但你只想要 eval 而不是 literal_eval

>>> a = [1,2,3,42]
>>> code = "[x for x in a if x > 2]"
>>> eval(code)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2019-10-10
    • 2019-08-01
    • 2019-01-05
    • 2016-03-23
    相关资源
    最近更新 更多