Frage

Ich bin ein PHP -Programmierer, der versucht, Python für in Syntax zu verstehen. für in

for i in range(0,5):

in PHP wäre sein

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

Aber was macht das?

for x, y in z:

Und was wäre die Übersetzung zu PHP?

Dies ist der vollständige Code, den ich in PHP übersetzt:

 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
War es hilfreich?

Lösung

self._v_scaleInfo: ist eine Reihe von Tupeln vermutlich wie [(x,y),(x,y),...] Alsofor width, height in self._v_scaleInfo: Schleifen Sie durch die Array -Füllbreite und Höhe mit den Tupelwerten.

PHP würde ungefähr gehen wie:

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

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

Andere Tipps

In Ihrem einfachen Beispiel for x,y in z, z wäre eine Liste von Koordinatenpaaren wie [(0,1), (2,5), (4,3)]. Mit jeder Drehung durch die für die für Schleife, die x Variable erhält die erste Koordinate im Paar und y bekommt die zweite.

In Python können Sie mehrere Rückgabewerte haben. Sie können auch ein solches Tupel definieren

t = (1,2,3)

Um Zugriff auf die Elemente in T zu erhalten, können Sie Folgendes tun:

a, b, c = t

Dann hat a den Wert 1 usw.

Wenn Sie ein Array von 2 Element -Tupeln hatten, können Sie sie mit dem folgenden Code durch sie aufzählen

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

das erzeugt die folgenden

1 2
3 4
5 6

Angenommen, Z ist eine Liste von Tupeln in Python.

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

Es wäre so etwas wie:

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

Wenn Sie das für x verwenden, würde Y in Z zu: Folgendes führen:

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

Also übersetzen

for x, y in z:

In PHP wäre so etwas wie:

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

Konzeptionell

for x,y in z

iteriert tatsächlich mit einem Enumerator (sprachspezifische Implementierung eines Iteratormusters) für Schleifen auf indexbasierter Iteration.

Für x würde y in z semantisch wie sein

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

Beachten Sie, dass dies für Tupel in Python funktioniert.

Es entspricht ungefähr (Pseudocode):

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

Es bedeutet, dass jeder Gegenstand in z Enthält 2 Elemente (zum Beispiel ist jedes Element eine Liste mit 2 Elementen).

Mit diesem Konstrukt können Sie über mehrdimensionale Sammlungen iterieren. Für eine 3x2-Liste könnten Sie:

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

Dies druckt:

1 2
3 4
5 6

Das gleiche Konstrukt könnte für ein Wörterbuch verwendet werden, das etwas Sinn ist, auch eine zweidimensionale Sammlung:

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

Dies druckt:

1 one
2 two
3 three

In Python ist dieses Konstrukt allgemein und arbeitet in jeder Dimension. Wenn wir unsere ursprüngliche 3x2 -Liste in eine 2x3 -Liste ändern, können wir dies tun:

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

Dies druckt:

1 2 3
4 5 6

In PHP denke ich, dass Sie dies mit Nest für Loops tun müssen. Ich glaube nicht, dass es ein Konstrukt gibt, um die Art der Dekonstruktion mehrerer Dimensionslisten durchzuführen, die in Python möglich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top