따라서 내 입력으로 중첩 된 목록이 있습니다 (중첩 된 목록은 항상 정사각형입니다. 즉, 열과 동일한 수의 행). 이 목록을 요소가 원래 목록의 2x2 "부분"인 다른 중첩 목록으로 나누고 싶습니다.
예를 들어, 내 입력이
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
내 출력은 [[1,2,5,6], [3,4,7,8], [9,10,13,14], [11,12,15,16]]
다른 예 : 입력 :
[[1,2,3],
[5,6,7],
[9,10,11],
산출: [[1,2,5,6],[3,7],[9,10],[11]]
처음 두 개의 열과 행을 통과하여 목록으로 만든 다음 다른 목록에 추가 한 다음 프로세스를 반복하는 중첩 된 for 루프를 만들려고 시도했지만 범위를 벗어난 인덱스 오류가 발생합니다.
이것이 내가 지금까지 한 일입니다.
def get_2_by_2(map: List[List[int]]) -> int:
i = 0
j = 0
lst_2d = []
lst = []
for row in range(i, min(i+2, len(map))):
for column in range(j, min(j+2, len(map))):
print(row,column)
lst.append(map[row][column])
lst_2d.append(lst)
return lst_2d
기본적으로 이것은 처음 2x2 만 반환합니다. 나는 외부에서 while 루프를 사용하고 i와 j의 값을 증가시키고 while 루프를 그들 중 하나에 종속 시키려고했습니다. 그 결과 인덱스가 경계를 벗어났습니다.
2 단계로 행과 열을 반복하고 그에 따라 목록 목록을 분할 할 수 있습니다.
def get_2_by_2(matrix):
output = []
for row in range(0, len(matrix), 2):
for col in range(0, len(matrix[0]), 2):
output.append([i for r in matrix[row: row + 2] for i in r[col: col + 2]])
return output
또는 중첩 된 목록 이해력 :
def get_2_by_2(matrix):
return [
[i for r in matrix[row: row + 2]
for i in r[col: col + 2]] for col in range(0, len(matrix[0]), 2)
]
그래서 주어진 :
m = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]
get_2_by_2(m)
보고:
[[1, 2, 5, 6], [3, 4, 7, 8], [9, 10, 13, 14], [11, 12, 15, 16]]
그리고 주어진 :
m = [[1, 2, 3],
[5, 6, 7],
[9, 10, 11]]
get_2_by_2(m)
보고:
[[1, 2, 5, 6], [3, 7], [9, 10], [11]]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다