해결된 질문
작성
·
323
0
4중 for문을 하기 싫어서 체크리스트를 3중 리스트로 만들어서 풀었습니다.
3중 리스트 요소를 모두 더하고 싶습니다,
넘파이나 itertools를 사용하면 되긴 하는데 코딩 시험이라 사용을 못할수 있을꺼 같아서
기본적으로 2중~ 다중리스트 sum을 하는 방법이 sum(2중 리스트, []) 이런 방법으로 1차원 리스트로 풀어서 합하는 방법말고는 없나요? 검색해도 잘 안나오네요
답변 3
1
다중리스트의 모든 합을 한번에 구해주는 함수가 존재하는지 저도 모르겠습니다. 죄송합니다.
저 같았으면 이렇게 sum([sum(ch3[i][j]) for i in range(3) for j in range(3)]) 리스트 컴프리헨션을 썼을 것 같습니다.
sum 함수를 이용해 다중리스트를 1차원 리스트화 하는 법은 이정민님을 통해 처음 알았습니다. 둘의 수행시간을 아래 코드로 측정해보니 sum으로 1차원화 해서 더하는게 조금 더 좋습니다.
import time
def Test():
ans=0
for i in range(100000):
ch3[2][2][0]=i
#ans+=sum(sum(sum(ch3, []), []))
ans+=sum([sum(ch3[i][j]) for i in range(3) for j in range(3)])
return ans
if __name__=="__main__":
ch3=[[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]],
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]],
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]]
start = time.time()
print(Test())
end = time.time()
print("Time: {} sec".format(end-start))
참고로 3차원 리스트를 ch_m=[[[0]*9]*3]*3 처럼 하면 [0]*9라는 동일 객체가 9번 복사되는 것입니다. 이렇게 생성하면 ch_m[0][0][0]=1을 하면 9개의 모든 0번 인덱스에 1이 기록됩니다.
3차원 리스트 생성은 ch_m=[[[0]*9 for _ in range(3)] for _ in range(3)] 처럼 해야 합니다.
0
0
3차원 리스트 만드는거 정말 나중에 시험 볼때 실수를 할뻔 했습니다. 감사합니다.
혹시 테스트 케이스 추가가 나중에 가능하시다면 하나 더 추가하면 좋을꺼 같습니다.
잘못된 방법으로 만든 3차원 리스트로 테스트 케이스가 모두 통과가 되었네요.