2013-03-04 2 views
0

파이썬 알고리즘을 C#으로 변환 중입니다. 설명이 필요합니다.파이썬 배열에 대한 설명이 필요합니다.

offsets2 = [[(0.1, 0.1), (0.5, 0.1), (0.9, 0.1), (1.1, 0.1)], 
      [(0.1, 0.5), (0.5, 0.5), (0.9, 0.5), (1.1, 0.5)], 
      [(0.1, 0.9), (0.5, 0.9), (0.9, 0.9), (1.1, 0.9)], 
      [(0.1, 1.0), (0.5, 1.0), (0.9, 1.0), (1.1, 1.0)]] 

이 : 그래서 나는이 목록의 목록이

for offset in offsets2: 
    offset = [(int(x + lane.width * dx), 
       int(y + self.canvas.row_height * dy)) 
       for dx, dy in offset] 

을 나는 DX와 DY가 무엇인지 궁금? 나는 델타 x와 델타 y를 추측하고 있지만 확실하게 확인하고 C#으로 가져 오는 방법을 묻고 싶습니다.

+0

질문은 저에게별로 도움이되지 않습니다. 목록 이해력에 대해 읽어보십시오. – Sam

+0

이 코드는 나에게 약간 손상된 것 같습니다. 할당'offset = ...'은 목록의 * content *를 변경하지 않고'offset' 변수 만 변경합니다. 한 번의 반복에서 계산 된 모든 것은 다음 반복의 시작 시점에 삭제됩니다. 마지막 반복의 결과 만'offset'을 통해 얻을 수 있습니다. 아마 여러분이 원하는 것이 아닙니다. 목록의 내용을 변경하려면'offset [:] = ...'을 사용하십시오. – bikeshedder

답변

1

이 코드는 소위 List Comprehension을 사용합니다.

for offset in offsets2: 
    _tmp = [] 
    for dx, dy in offset: 
     _tmp.append((int(x + lane.width * dx), 
        int(y + self.canvas.row_height * dy)) 
    offset = _tmp 

offset 2- 튜플을 포함하고 반복하는 동안 발현 for dx, dy in offset 그을 언팩 :

그것은 대략로 변환한다. 그것은 글쓰기와 같습니다 :

for coord in offset: 
    if len(coord) != 2: 
     raise ValueError 
    dx = coord[0] 
    dy = coord[1] 
    ... 
+0

감사합니다.이게 정말 도움이됩니다. – noodles

0

dxdy은 목록의 각 값 집합에 할당되는 임시 변수입니다. 첫 번째 반복에서 dx=0.1, dy=0.1, 두 번째는 dx=0.5, dy=0.1 등입니다.

1

print 문을 넣어 원하는 것을 찾을 수 있습니다.

for offset in offsets2: 
    print offset 
    tmp = [] 
    for dx, dy in offset:# for each pair (dx,dy) of offset 
     print dx, dy 
     newCoords = (int(x + lane.width * dx), 
       int(y + self.canvas.row_height * dy)) 
     tmp.append(newCoords) 
    offset = tmp[:] 

>>> [(0.1, 0.1), (0.5, 0.1), (0.9, 0.1), (1.1, 0.1)] 
>>> 0.1, 0.1 
>>> 0.5, 0.1 
>>> 0.9, 0.1 
.... 
>>> [(0.1, 0.5), (0.5, 0.5), (0.9, 0.5), (1.1, 0.5)] 
>>> 0.1, 0.5 
>>> 0.5, 0.5 
>>> 0.9, 0.5 
관련 문제