Developer/Python

[Basic][grammar] 이중 리스트의 행과 열 바꾸기 (부제: zip 함수 활용하기)

마크 주쿼버그 2023. 9. 22. 14:07
이중 리스트가 있을 때, 각 동일한 열 값끼리 더하고 싶을 때에는 어떻게 하면 좋을까?

 

Question:

학생의 성적이 리스트 형태로 저장되어 있다. 자세한 형태는 아래와 같다.

# 국어, 수학, 영어, 과학, 사회
scores = [[30, 90, 55, 100, 60],
          [100, 85, 100, 90, 95],
          [60, 75, 50, 100, 100],
          [80, 80, 80, 80, 80]]

과목별로 평균, 최대값, 최소값을 구하려면 어떻게 해야 할까?


Answer:

이중 반복문을 이용하는 방법도 있겠지만, zip() 함수를 이용하여 이중 리스트의 행과 열을 역전하여 풀어보겠다.

zip 함수는 여러 개의 iterable 객체를 엮어주는 역할을 수행하는 함수로, 튜플이나 리스트 등 iterable 객체라면 모두 적용할 수 있다. 사용법은 아래와 같다.

# scores 내 각각의 리스트를 zip 함수에 넣어준다.
list(zip(*scores))

 

위에서 작성된 *은 가변인자를 의미하는 문자로, 인자의 개수를 정확하게 알 수 없을 때 혹은 정해지지 않았을 때 사용한다.

즉, scores 리스트 안에 몇 개의 값이 있을지는 모르지만 다수 개의 iterable 객체를 입력으로 받겠다는 의미이다.

현재는 4개의 리스트가 포함되어 있으므로 4개의 리스트가 zip 함수의 입력으로 들어간다.

 

실행 결과는 위의 scores에 행과 열이 역전된 아래와 같은 형태를 가진다.

[(30, 100, 60, 80),
 (90, 85, 75, 80),
 (55, 100, 50, 80),
 (100, 90, 100, 80),
 (60, 95, 100, 80)]

 

따라서 각 행의 평균, 최대, 최소값을 구하면 과목별 결과가 도출될 수 있다.

 

 

[최종 코드]

이중 리스트를 역전하여 과목별 성적의 평균,최소값,최대값 구하는 코드

 


 

Conclusion:

- 이중 리스트에서 각 행과 열을 역전하기 위해 zip 함수를 사용하는 방법을 알아보았다.- 위 문제에 대해 이렇게 푸는 것이 최적의 답은 아닐 수 있으니, 실제 코드를 구현할 때에는 가독성이나 효율성 면을 고려하여 작성하도록 하자.