문제

나는 구문에서 Python 's를 이해하려고 노력하는 PHP 프로그래머입니다. 나는 기본을 얻습니다. 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
도움이 되었습니까?

해결책

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];
  ...
}

다른 팁

당신의 간단한 예에서 for x,y in z, Z는 [(0,1), (2,5), (4,3)]. for 루프를 통과 할 때마다 x 변수는 쌍에서 첫 번째 좌표를받습니다 y 두 번째를 얻습니다.

파이썬에서는 여러 리턴 값을 가질 수 있습니다. 이와 같은 튜플을 정의 할 수도 있습니다

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

z가 파이썬의 튜플 목록이라고 가정 해 봅시다.

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

그것은 다음과 같습니다.

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

x에이를 사용하면 z의 y가 다음과 같습니다.

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];

개념적으로

for x,y in z

루프는 인덱스 기반 반복을 기반으로하는 열거 자 (반복자 패턴의 언어 별 구현)를 사용하여 실제로 반복하고 있습니다.

x의 x는 z의 y가 의미 적으로

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

이것은 파이썬의 튜플에 효과가 있습니다.

(의사 코드)와 거의 같습니다.

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

그것은 모든 항목을 의미합니다 z 2 개의 요소가 포함되어 있습니다 (예 : 모든 항목에는 2 개의 항목이있는 목록).

이 구조물은 다차원 컬렉션을 반복 할 수 있으므로 3x2 목록의 경우 다음을 수행 할 수 있습니다.

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

이 인쇄물 :

1 2
3 4
5 6

동일한 구성이 사전에 사용될 수있는 2 차원 컬렉션도 사용될 수 있습니다.

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

파이썬 에서이 구성은 일반적이며 모든 차원에서 작동하여 원래 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와 함께 이것을해야한다고 생각합니다. Python에서 가능한 다중 차원 목록 해체를 수행하는 구성이 있다고 생각하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top