【问题标题】:Use iterator as variable name in function python在函数python中使用迭代器作为变量名
【发布时间】:2015-07-28 19:26:03
【问题描述】:

我看到了这个问题,我想知道是否可以使用某些东西来解决我遇到的问题。

我定义了数学对象列表

obj1,obj2,...,objn

我有一个函数 fun 对这些对象做一些事情

sol1=fun(obj1)
sol2=fun(obj2)
...
soln=fun(objn)

现在我想要的是使用 for 循环来计算所有 sol1。我知道我可以将所有对象放在一个列表中,但我想知道是否可以做其他事情。

【问题讨论】:

  • 您是否拥有列表中的所有 obj1、obj2、...、objn?
  • 我忘记添加指向此stackoverflow.com/questions/8530694/… 的链接我知道我可以对列表中的所有对象进行操作,但我想知道是否有其他方法可以做到这一点。由于某些原因可能对我有用,将所有解决方案都作为 sol_i 而不是 sol[i]。
  • 有多种方法可以满足您的要求(exec、globals、...)。然而,这些方法通常是非常不受欢迎的,并且使用列表或字典更符合 Python 风格
  • 您好 Julien,这些对象不在(本应)在列表中。我同意使用列表更 Pythonic,但因为我需要 k 对象是 objk 而不是 obj[k] 我正在寻找一些可能的替代方案。这是由于对象 obj 的特殊性质。例如,如果我在一个多维空间中,我可以使用 x[0] 作为 x_1 和 x[n-1] 作为 x_n 但是如果我想做一个偏导数,我更喜欢将我的变量称为 x_k 而不是 x[k -1]。我希望它更清楚。再次对大家编辑的错误问题表示歉意。
  • 我不明白为什么这证明不使用列表是合理的......

标签: python


【解决方案1】:
sol_iterator = (fun(x) for x in obj_iterator)

【讨论】:

    【解决方案2】:

    我定义了数学对象 obj1,obj2,...,objn 的列表

    所以你有

    objs = [obj1, obj2, obj3]
    

    想要创建结果列表?

    最简单的就是

    sols = [fun(obj) for obj in objs]
    

    【讨论】:

      【解决方案3】:

      所以你有:

      obj1,obj2,...,objn 
      

      还有一些功能,让我们说:

      def func(obj):
          print(obj*2))
      

      所以,你正在寻找这个:

      for i in range(1,n+1):
         fun(eval("obj"+str(i)))
      

      【讨论】:

      • 谢谢,这部分是我正在寻找的。但是这样我就没有sol1,sol2等了。
      • 嗯,这个答案让你大部分时间都在那里。可能您需要使用 exec 而不是 eval 来创建具有变量名称的变量,例如for i in range(1,n+1): exec('sol{0} = fun(obj{0})'.format(str(i)), globals(), locals())
      • 免责声明:虽然上述方法可能有效(我没有测试过),但无论您真正想要达到什么目的,这都不是最好的方法。
      • 只需更改函数上的 print 即可返回,并使用exec 命令将“sol”+str(index) 分配给函数的每次调用。我同意@skolsuper,这不是一个好方法!
      • @skolsuper:你可以看到上面与 Julien 的讨论。感谢您的回答,它可以通过一个输入来获得乐趣。但是,如果我有一个 fun(obj_i, b) 给定 b 并且不改变循环怎么办?
      猜你喜欢
      • 2012-01-21
      • 2016-04-20
      • 2020-03-09
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多