이것은 내 첫 번째 게시물이며, 나는이 멋진 사이트입니다.중첩 목록의 요소를 대각선으로 표시
난 대각선으로 3 × 3 배열의 모든 요소를 나열하고 싶습니다 :
L = [ [1, 2, 3],
[4, 5, 6],
[7, 8, 9] ]
예상 출력 : 또한
[[7], [4, 8], [1, 5, 9], [2, 6], [3]]
, 어떻게 내가 어떤 N의 X의 N 배열에 일반화 것인가?
편집 : 이전에 물어 봤지만 아직 그 문제에 대해 numpy 또는 라이브러리를 가져 오지 않고 방법을 찾고 있습니다.
Edit2가이 : 내 친구들 중 하나는이 솔루션을 제공, 내가 그것을 좋아하는 대부분의 :
당신이 왼쪽 하단에서 시작하여 대각선을 찾는 때문에, 당신은 광장의 오른쪽 상단에서 시작하여이 작업을 수행 할 수 있으며, 결국 당신의 솔루션을 되돌릴 수 있습니다. 내 접근 방식은 먼저 L의 각 행을 뒤집은 다음 각 요소를 해당 대각선 목록에 추가했습니다. 여기서 통찰력은 최종 목록의 첫 번째 하위 목록이 아니라 인덱스 K에서 시작하는 각 행 K에 요소를 추가하기 시작한다는 것입니다. 예를 들어 행 [4,5,6]을 행 [6,5, 4], 대각선으로 정렬 된 목록의 두 번째 하위 목록 (이 두 번째 행)에 6을 추가 한 다음 세 번째 하위 목록에 5를 추가 한 다음 네 번째 하위 목록에 4를 추가합니다. 그러나 대각선 목록에서 현재 네 번째 하위 목록이없는 경우 네 번째 빈 목록을 추가 한 다음 4로 채 웁니다.
설명이 너무 명확하지 않을 수 있습니다. 내가 가진 코드. 단지 파이썬 (NO NumPy와) 사용
def diagonal(l):
L = l[:]
return_list = [[] for i in range(len(L))]
for line in range(len(L)):
L[line].reverse()
i = line
for elem in L[line]:
if i >= len(return_list):
return_list.append([])
return_list[i].append(elem)
i += 1
return_list.reverse()
return return_list
난 numpy를 사용하지 않는 동안 프로그램을 위해 이것을하는 방법을 만들었습니다. 나는 그것을 http://stackoverflow.com/questions/6313308/get-all-the-diagonals-in-a-matrix-list-of-lists-in-python에 추가 할 것이다 – flakes
좋아, 나는 그것을 추가했다. – flakes
@Calpratt 감사합니다! 나는 그것을 이해하기 위해 당신의 솔루션을 3 번 읽어야했지만 마침내 그것을 얻었습니다; – Moe