2016-10-26 1 views
0

왼쪽 위 모서리에 기원이있는 (x, y) 좌표의 데이터가 있습니다. 인덱스 행을 뒤집는 것, 파이썬

| 0 | 1 | 2 | 3 | 4| 
| 5 | 6 | 7 | 8 | 9| 
|10 |11 |12 |13 |14| 
|15 |16 |17 |18 |19| 
|20 |21 |22 |23 |24| 

예 (X, Y) = (1,4) 식의 Y * 5 + X = 21하지만 그것을 원하는

: 그 모양 0부터 인덱스 매트릭스 차례 왼쪽 하단의 기원은 그와 같은 색인 행렬을 획득하도록 그래서 기본적 행 반전

| 20| 21| 22| 23| 24| 
| 15| 16| 17| 18| 19| 
| 10| 11| 12| 13| 14| 
| 5 | 6 | 7 | 8 | 9| 
| 0 | 1 | 2 | 3 | 4| 

. 저기 파이썬 방법으로 할 수 있습니까? 달리 계산할 때 가장 효율적인 방법은 무엇입니까?

답변

0

for i in len(v)//2: 
     v[i], v[-i] = v[-i], v[i] 
0

x

>>> M = [[0,1,2],[3,4,5],[6,7,8],[9,10,11]] 
>>> M[::-1] 
[[9, 10, 11], [6, 7, 8], [3, 4, 5], [0, 1, 2]] 
0

사용하여 배열을 반대로 나는이 얼마나 파이썬 모르겠지만, 그것을 잘 작동합니다 같은 하나 list(reversed(x)) 또는 x[::-1] :

matrix=[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]] 
backwards=matrix[::-1] 
inverted=list(reversed(matrix)) 

reversedlist이 목록으로 변환하는 역방향 반복자를 반환하고 [::-1]은 요소를 거꾸로 가져 오는 목록 연결을 반환합니다.

1

나는 "파이썬"여부에 대해 잘 모르겠지만, 나에게 가장 직접적이고 효과적인 방법은 간단하다 :

u = [v[5 * (len(v) // 5 - i // 5 - 1) + i % 5] for i in xrange(len(v))]

편집 :

당신이 불편하면 이러한 분할 및 모듈러스에 대해서는 수학 계산이없는 대체 방법 (효율성이 떨어질 수 있음)은 다음과 같습니다.

sum([v[i: i+5] for i in xrange(0, len(v), 5)][::-1], [])

0

당신의 매트릭스의 모양이 width, height = 5, 5이며, 목록 인덱스에서 인덱스를 바닥을 얻을 수있는 일반적인 공식은 다음과 같습니다

width*(height-index//height-1)+index%height