Question

Je suis un programmeur php essayant de comprendre la syntaxe de python J'obtiens le de base pour

for i in range(0,5):

en php serait

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

mais qu'est-ce que cela fait

for x, y in z:

et quelle serait la traduction en php?

Ceci est le code complet que je traduis en 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
Était-ce utile?

La solution

self._v_scaleInfo: est un tableau de n-uplets, probablement, comme [(x, y), (x, y), ...] so pour width, height in self._v_scaleInfo: parcourt le tableau en remplissant la largeur et la hauteur avec les valeurs de tuple.

php irait quelque chose comme:

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

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

Autres conseils

Dans votre exemple simple pour x, y dans z , z serait une liste de paires de coordonnées, comme [(0,1), (2,5), (4, 3)] . À chaque tour dans la boucle for, la variable x obtient la première coordonnée de la paire et y la seconde.

En python, vous pouvez avoir plusieurs valeurs de retour. Vous pouvez également définir un tuple comme celui-ci

t = (1,2,3)

Pour avoir accès aux éléments de t, vous pouvez procéder comme suit:

  

a, b, c = t

Alors a a la valeur 1, etc.

Si vous avez un tableau de 2 tuples d'éléments, vous pouvez les énumérer à l'aide du code suivant

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

qui produit ce qui suit

1 2
3 4
5 6

Supposons que z soit une liste de tuples en Python.

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

ce serait quelque chose comme:

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

l’utiliser pour x, y dans z donnerait:

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

so Traduire

for x, y in z:

en PHP serait quelque chose comme:

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

Conceptuellement

for x,y in z

effectue en fait une itération à l'aide d'un énumérateur (implémentation spécifique à la langue d'un modèle d'itérateur), car les boucles sont basées sur une itération basée sur l'index.

pour x, y dans z serait sémantiquement comme

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

Notez que cela fonctionnera pour les n-uplets en python.

C'est à peu près équivalent à (pseudo-code):

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

Cela signifie que chaque élément de z contient 2 éléments (par exemple, chaque élément est une liste de 2 éléments).

Cette construction vous permet de parcourir des collections multidimensionnelles. Ainsi, pour une liste 3x2, vous pourriez avoir:

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

Ceci imprime:

1 2
3 4
5 6

La même construction peut être utilisée dans un dictionnaire, ce qui a du sens aussi une collection à deux dimensions:

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

Ceci imprime:

1 one
2 two
3 three

En Python, cette construction est générale et fonctionne dans toutes les dimensions. En remplaçant notre liste 3x2 d'origine par une liste 2x3, nous pourrions le faire:

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

Ceci imprime:

1 2 3
4 5 6

En PHP, je pense que vous devez le faire avec un nid pour les boucles. Je ne pense pas qu’il existe une structure permettant de réaliser le type de déconstruction de liste à plusieurs dimensions possible en Python.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top