在python中设置循环迭代器变量= 0

时间:2018-08-01 14:00:56

标签: python loops variables

我在python中有一个3D二进制数组/列表,用于存储序列。我想遍历数组并打印出序列。 但是,对于python来说,我很努力地将内部循环的循环变量设置为某个值。

for r in range(9, len(resources)-9):
  for i in items:
      for j in items:
          print('assign[',i,'][',j,'][',r,'] ==', assign[(r, i)][j].SolutionValue())
          if assign[(r, i)][j].SolutionValue() ==1: 
              i=j
              print('set i=j: i = ', i)
              j=0
              print('set j=0: j = ', j)
  print()

请参见下面的部分解决方案:

assign[ 0 ][ 0 ][ 9 ] == 0.0
assign[ 0 ][ 1 ][ 9 ] == 0.0
assign[ 0 ][ 2 ][ 9 ] == 0.0
assign[ 0 ][ 3 ][ 9 ] == 0.0
assign[ 0 ][ 4 ][ 9 ] == 1.0
set i=j: i =  4
set j=0: j =  0
assign[ 4 ][ 5 ][ 9 ] == 0.0
assign[ 4 ][ 6 ][ 9 ] == 0.0
assign[ 1 ][ 0 ][ 9 ] == 1.0

在我的代码的if语句中,我想设置i = j并返回j = 0。似乎这适用于我,但不适用于j。另一个选择是打破内部循环,但是我认为在python中没有引用某些循环。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用numpy遍历数组并打印序列:

import numpy
for e in numpy.array([[[1,2],[1,2]],[[1,2],[1,2]]]).flatten(): print(e)

只需将该列表替换为您的列表即可。

答案 1 :(得分:0)

下面的解释会有点通用,但是希望阅读后您将获得解决特定或更复杂的,处理高维数组的问题的基本知识。

分配(一般情况)

让我们首先回顾一下在python中为数组分配空间的简单方法:

1d array: lst = [0]*K0
2d array: lst = [0]*K1*K0
3d array: lst = [0]*K2*K1*K0
4d array: lst = [0]*K3*K2*K1*K0
...
Nd array: lst = [0]*Kn*Kn-1*...*K0

最典型的尺寸数组是(1D,2D,3D,4D),而K0 / K1 / K2 / K3分别称为宽度/高度/深度/时间

索引(一般情况)

一旦分配了空间,剩下的所有知识就是如何索引这些数组,那么,让我们尝试找出如何计算索引数组:

1d: index = x0
2d: index = x1*k0 + x0
3d: index = x2*k1*k0 + x1*k0 + x0
4d: index = x3*k2*k1*k0 + x2*k1*k0 + x1*k0 + x0
...
Nd: index_n = xn*kn-1*kn-2*...*k0 + index_n-1

最典型的尺寸数组是(1D,2D,3D,4D),因此通常将x0 / x1 / x2 / x3分别称为x / y / z / t。

皮套(分配和索引)

1d: lst = [0]*width
    lst[x]
2d: lst = [0]*width*height
    lst[y*width + x]
3d: lst = [0]*width*height*depth
    lst[z*width*height + y*width + x]
4d: lst = [0]*width*height*depth*duration
    lst[t*width*height*depth + z*width*height + y*width + x]

结论

似乎您正在处理3d数组,因此如上所述,我们现在知道在python中分配3d数组的一种方法可以像这样:

lst = [0]*width*height*depth

和为这种数组建立索引(写或读)的一种可能方法是:

lst[z*width*height + y*width + x]

希望整个解释有助于澄清一些有关数组的问题,无论是使用python还是其他语言,其基本理论将始终相同,唯一的区别是可能存在其他更高效的分配方式那些语言上的/ index数组,仅此而已。