【问题标题】:R's eval(parse(text=text)) equivalent in PythonR 在 Python 中的 eval(parse(text=text)) 等效项
【发布时间】:2021-03-30 18:29:02
【问题描述】:

我正在寻找一种在 Python 中使用循环和函数动态分配变量的方法。我可以在 R 中这样做的一种方法是使用 eval(parse(text=text))。例如,假设我有这个代码:

var <- c('First','Second','Third')

for (i in 1:length(var)){
  text <- paste0("Variable_", var[i], " <- ", i)
  eval(parse(text = text))
}

我想要的输出如下:

> Variable_First
[1] 1
> Variable_Second
[1] 2
> Variable_Third
[1] 3

在 Python 中这样做的等效方法是什么?

提前致谢!

【问题讨论】:

  • 这能回答你的问题吗? How do I create variable variables?
  • dictionary 是否适合您的目的?
  • @G.Anderson,谢谢你的链接,但这不是我想要的,因为我正在寻找创建多个变量并通过将固定字符串与其他多个字符串合并来命名它们。例如,在我的代码中,paste0("Variable_", var[i], " &lt;- ", i) 这里将“Variable_”与一个包含多个字符串的循环对象组合在一起,从而创建了 3 个具有相同初始模式的不同变量
  • @TimurShtatland 如果字典适用于这种情况,我会全力以赴!只要结果与上面详述的相同

标签: python r eval


【解决方案1】:

好吧,如果您真的想这样做,您可以使用与exec 几乎相同的方式进行操作。不过,这可能不是最好的选择……

var = ["First", "Second", "Third"]
for i, j in enumerate(var, start=1):
    exec(f"Variable_{j} = i")

给予

>>> Variable_First
1
>>> Variable_Second
2
>>> Variable_Third
3

【讨论】:

    【解决方案2】:

    使用dictionaries 来完成类似的事情:受限命名空间中的“变量”变量。例如,这里使用dictionary comprehension 分配给字典dct

    lst = ['First','Second','Third']
    dct = {f'Variable_{s}': i for i, s in enumerate(lst)}
    print(dct)
    # {'Variable_First': 0, 'Variable_Second': 1, 'Variable_Third': 2}
    

    【讨论】:

    • 我认为作者想要获取变量而不是某些字典中的键。
    • @Jiaxiang 可能是这样,但获取变量的唯一“解决方案”是使用execeval,应避免使用。例如,参见herehere。以标准的pythonic方式使用字典来解决创建“变量”的问题。它更安全、更健壮且更易于维护。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2011-10-09
    • 2017-07-06
    相关资源
    最近更新 更多