【问题标题】:Python: Is there a way to use the range as the output name in a for loop?Python:有没有办法在 for 循环中使用范围作为输出名称?
【发布时间】:2018-02-07 13:55:30
【问题描述】:

我正在寻找一个在 for 循环中使用范围作为输出名称的方法。我可以想到其他方法来做到这一点,但这是一个班级,所以我确定我忽略了一些简单的事情。在下面的简化代码中,我希望输出类似于:

"t1 = [[ 0.5 1. 1.5] [ 2. 2.5 3. ]]"

"t2 = [[ 3.5 4. 4.5] [5. 5.5 6.]]"

t1 = np.array([[1,2,3],[4,5,6]])
t2 = np.array([[7,8,9],[10,11,12]])

for set in [t1,t2]:
   out = set/2
   print(out)

【问题讨论】:

  • 你想打印变量名还是问题出在哪里?
  • 变量名称在源代码本身之外不存在。
  • 对不起,我的问题不够具体:我得到了相当于:“for set in [t1,t2]:”的行,需要将名称“t1”和 t2”分配给结果。抱歉,我的回答格式奇怪,因为此编辑器不接受换行符。

标签: python for-loop


【解决方案1】:

这应该可行:

t = {}
t[1] = np.array([[1,2,3],[4,5,6]])
t[2] = np.array([[7,8,9],[10,11,12]])

t = {k: v/2 for k, v in t.items()}

{1: array([[ 0.5,  1. ,  1.5],
       [ 2. ,  2.5,  3. ]]),
 2: array([[ 3.5,  4. ,  4.5],
       [ 5. ,  5.5,  6. ]])}

【讨论】:

  • 抱歉,我的问题不够具体:我得到的一行相当于: for set in [t1,t2]: 并且需要为结果分配名称“t1”和 t2”。我的回答格式很奇怪,因为这个编辑器不接受换行符。
  • 已更新。看起来您想为数组提供数字标签。上面的字典很适合这个。
  • 这很优雅!我不确定这是他们的想法,但我会尝试你的解决方案,看看我是否可以让它适应他们的限制。谢谢!
  • 您更新的代码不再出现(?)我在这里发布以防其他人遇到同样的问题:
  • 当心:dicts 不是有序的(从技术上讲,它们在 py3.6 中,但这是一个实现细节 - 它们仍然被指定为键:值对的 无序 集合)。
【解决方案2】:

这就是你要找的吗?

t1 = np.array([[1,2,3],[4,5,6]])
t2 = np.array([[7,8,9],[10,11,12]])


def print_list(name, value):
    print("{n} = {v}".format(n=name, v=str(value).replace('\n', '')))

>>> print_list("t2", t2)
"t2 = [[ 7  8  9] [10 11 12]]"

当然也可以除以2的规格

>>> print_list("t2", t2/2)
"t2 = [[ 3.5  4.   4.5] [ 5.   5.5  6. ]]"

【讨论】:

    【解决方案3】:

    问答:

    t1 = np.array([[1,2,3],[4,5,6]])
    t2 = np.array([[7,8,9],[10,11,12]])
    
    for i, set in enumerate([t1,t2], 1):
       out = set/2
       print("t{} = {}".format(i, out))
    

    干净一点

    t1 = np.array([[1,2,3],[4,5,6]])
    t2 = np.array([[7,8,9],[10,11,12]])
    
    for name, set in zip(["t1", "t2"], [t1, t2]):
       out = set/2
       print("{} = {}".format(name, out))
    

    更干净:

    from collections import OrderedDict
    sets = OrderedDict(
        t1=np.array([[1,2,3],[4,5,6]]),
        t2=np.array([[7,8,9],[10,11,12]])
        )
    
    for name, set in sets.items():
       out = set/2
       print("{} = {}".format(name, out))
    

    我可以继续用很多其他方法给这只猫剥皮,但真正“正确”的解决方案取决于真实的环境和用例。

    附带说明:避免使用“set”作为标识符,因为它会影响内置的 set 类型。好吧,在三行函数中问题不大,但它仍然被认为是不好的(或至少有争议的)做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多