【问题标题】:Running through variables in for loop在for循环中遍历变量
【发布时间】:2014-11-28 11:47:38
【问题描述】:

我是 Python 新手,但我用它来处理数据。我有大量数据存储为浮点数组:

data1
data2
data3

我想对每个数据文件进行类似的处理。我正在考虑使用 for 循环:

for i in range(1,4):

然后我想将三个数据文件乘以 2,但我不确定之后如何继续。我想它会像他的:

for i in range(1,4):
     data_i=data_i*2

谢谢。

【问题讨论】:

  • call the three data files?!?!?!
  • 比如我想把所有的数据文件都乘以2。所以data1*2,data2*2,data3*2。
  • 如果你想改变变量名是不可能的,至少不改变python处理器

标签: python variables for-loop dynamic


【解决方案1】:

您可以创建一个二维数组,这意味着您将浮点数组放入另一个数组中。

你现在的情况是这样的:

data1 = [12, 2, 5]
data2 = [2, 4, 8]
data3 = [3, 0, 1]

通过这样做将你的数组放入另一个数组中:

datax = [data1, data2, data3]

您的新情况如下所示:

datax = [[12, 2, 5], [2, 4, 8], [3, 0, 1]]

现在我们可以遍历新的datax 数组并对其元素data1data2data3 执行操作。

类似的东西:

datax = [[12, 2, 5], [2, 4, 8], [3, 0, 1]]

for sub_array in datax:
    perform_action(sub_array)

【讨论】:

    【解决方案2】:

    您可以简单地将数据存储在例如列表

    data_list = [data1, data2, data3]
    
    for i, data in enumerate(data_list):
        some_fancy_stuff
        data_list[i] = data * 2
    

    一些解释 - enumerate 将逐字逐句枚举索引为i 的列表项,并将data_list[i] 分配给变量data。你可以用data 和它的索引i 做任何你想做的事情。

    【讨论】:

      【解决方案3】:

      你也可以使用 Python 推导来代替循环,这里有一个例子来说明它:

      >>> a1 = [1,2,3]
      >>> a2 = [4,5,6]
      >>> a3 = [7,8,9]
      >>> A = [a1, a2, a3]
      >>>
      >>> print [[x*2 for x in a] for a in A]
      [[2, 4, 6], [8, 10, 12], [14, 16, 18]]
      >>>
      

      让我也解释一下。

      下面的结构叫做comprehension

      a = [x*2 for x in X]
      

      它从数组X 中生成一个处理值(在示例中值乘以二)的数组(如括号[ ])。就好像我们这样写:

      a = []
      for x in X:
          a.append(x*2)
      

      但以更简洁的方式。 在您的情况下,我们将两种理解一并使用:

      [x*2 for x in a]
      

      和:

      [ [....] for a in A]
      

      所以这和我们做的一样:

      result = []
      for a in A:
          for x in a:
              result.append(x*2)
      

      但再次以更简洁的方式。

       

      如果您询问有关变量名修改的问题,那么在不改变语言处理器的情况下在 Python 中是不可能的。但我猜你在那个任务中根本不需要它。

      【讨论】:

      • 如果您确实需要结果列表,请仅使用map 或列表推导式。如果您只是将它用于在 A 的每个元素上调用 some_func 的副作用,请改用显式 for 循环。
      猜你喜欢
      • 2016-01-18
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多