Python中的for-in控制结构

1 投票
7 回答
1131 浏览
提问于 2025-04-15 16:24

我是一名PHP程序员,想要理解Python中的for in语法。我了解基本的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

这大概可以理解为(伪代码):

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

这意味着在z里面的每一个项目都有两个元素(比如说,每个项目都是一个包含两个项目的列表)。

1

在你简单的例子中,for x,y in z,这里的 z 是一组坐标对的列表,比如说 [(0,1), (2,5), (4,3)]。每次循环的时候,x 这个变量会拿到坐标对中的第一个数,而 y 则会拿到第二个数。

1

self._v_scaleInfo: 是一个包含多个元组的数组,应该像这样 [(x,y),(x,y),...]。所以 for width, height in self._v_scaleInfo: 这个循环会遍历这个数组,把每个元组的值分别填充到 width 和 height 这两个变量里。

在 PHP 中可以这样写:

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

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

撰写回答