用于控制结构的python

时间:2009-11-26 08:59:06

标签: php python for-loop

我是一名php程序员,试图理解python的语法 我得到了基本的for in

for i in range(0,5):
php中的

将是

for ($i = 0; $i < 5; $i++){

但这是做什么的

for x, y in z:

什么是php的翻译?

这是我正在翻译成php的完整代码:

 def preProcess(self):
    """ plan for the arrangement of the tile groups """

    tier = 0
    tileGroupNumber = 0
    numberOfTiles = 0
    for width, height in self._v_scaleInfo:

      #cycle through columns, then rows
      row, column = (0,0)
      ul_x, ul_y, lr_x, lr_y = (0,0,0,0)  #final crop coordinates
      while not ((lr_x == width) and (lr_y == height)):

        tileFileName = self.getTileFileName(tier, column, row)
        tileContainerName = self.getNewTileContainerName(tileGroupNumber=tileGroupNumber)
        if numberOfTiles ==0:
          self.createTileContainer(tileContainerName=tileContainerName)
        elif (numberOfTiles % self.tileSize) == 0:
          tileGroupNumber += 1
          tileContainerName = self.getNewTileContainerName(tileGroupNumber=tileGroupNumber)
          self.createTileContainer(tileContainerName=tileContainerName)
        self._v_tileGroupMappings[tileFileName] = tileContainerName
        numberOfTiles += 1

        # for the next tile, set lower right cropping point
        if (ul_x + self.tileSize) < width:
          lr_x = ul_x + self.tileSize
        else:
          lr_x = width

        if (ul_y + self.tileSize) < height:
          lr_y = ul_y + self.tileSize
        else:
          lr_y = height

        # for the next tile, set upper left cropping point
        if (lr_x == width):
          ul_x=0
          ul_y = lr_y
          column = 0
          row += 1
        else:
          ul_x = lr_x
          column += 1

      tier += 1

7 个答案:

答案 0 :(得分:1)

self._v_scaleInfo:是一个元组数组,大概就像[(x,y),(x,y),...]那样 for width, height in self._v_scaleInfo:使用元组值循环遍历数组填充宽度和高度。

php会像:

$scaleInfo = array(array(x,y), array(x,y),...);

for( $i = 0; $i < count($scaleInfo); $i++ ) {
  $width = $scaleInfo[$i][0];
  $height = $scaleInfo[$i][1];
  ...
}

答案 1 :(得分:1)

在您的简单示例for x,y in z中,z将是一个坐标对列表,例如[(0,1), (2,5), (4,3)]。每转过for循环,x变量获得对中的第一个坐标,y获得第二个坐标。

答案 2 :(得分:0)

它大致相当于(伪代码):

For every item i in z:
    x = i[0]
    y = i[1]
    Loop body happens here

这意味着z中的每个项目都包含2个元素(例如,每个项目都是包含2个项目的列表)。

答案 3 :(得分:0)

在python中,您可以拥有多个返回值。你也可以定义这样的元组

t = (1,2,3)

要访问t中的元素,您可以执行以下操作:

  

a,b,c = t

然后a的值为1,等等。

如果你有一个包含2个元素元组的数组,你可以使用以下代码枚举它们

z = [(1, 2), (3, 4), (5, 6)]
for x, y in z:
   print x, y

产生以下

1 2
3 4
5 6

答案 4 :(得分:0)

假设z是Python中的元组列表。

Z = [(1,2), (1,3), (2,3), (2,4)]

它会是这样的:

$z = array(array(1,2), array(1,3), array(2,3), array(2,4));

将其用于x,y在z中将导致:

z = [(1,2), (1,3), (2,3), (2,4)]
for x, y in z:
    print "%i %i" % (x,y)


1 2
1 3
2 3
2 4

所以翻译

for x, y in z:

进入PHP会是这样的:

for ($i=0; $i < count($z); $i++){
    $x = $z[$i][0];
    $y = $z[$i][1];

答案 5 :(得分:0)

概念

for x,y in z

实际上是使用枚举器(迭代器模式的语言特定实现)进行迭代,for循环基于基于索引的迭代。

对于x,y在z中在语义上就像

for (x=0 ; x<z.length ; x++ )
     for (y=1; x<z.length;y++) print z[x],z[y]

请注意,这适用于python中的元组。

答案 6 :(得分:0)

此构造允许您迭代多维集合,以便您可以拥有3x2列表:

z = [[1,2], [3,4], [5,6]]
for x, y in z:
    print x, y

打印:

1 2
3 4
5 6

可以在字典上使用相同的构造,这也是一个二维集合:

z = {1:"one", 2:"two", 3:"three"}
for x, y in z.items():
    for x, y in z.items():
        print x, y

打印:

1 one
2 two
3 three

在Python中,这个结构是通用的,适用于任何维度,将我们原来的3x2列表更改为2x3列表,我们可以这样做:

z = [[1,2,3], [4,5,6]]
for w, x, y in z:
    print w, x, y

打印:

1 2 3
4 5 6

在PHP中我认为你必须使用nest for循环这样做,我不认为有一个构造可以在Python中进行多维度列表解构。