문제
나는 구문에서 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에서 가능한 다중 차원 목록 해체를 수행하는 구성이 있다고 생각하지 않습니다.