파이썬 List 곱 (List Multiply) vs List Comprehension
아래와 같은 방식으로 이차원 list를 생성해보자 !
l = [[0] * 3] * 5
길이가 3이며, 모든 요소가 0으로 이루어진 list로 이루어진 이차원 list를 생성하는 코드이다.
list의 곱을 활용하는 방법인데, 이러한 방식으로 이차원 list를 생성 하여 사용한다면, 예기치 않은 결과값이 나올 수도 있다.
같은 list를 여러번 곱한다는 것은, 같은 객체의 참조 값을 재사용 한다는 의미다.
같은 참조 값을 여러번 복사한다는 부분에서 문제가 생길 수 있다.
예시를 보자면,
l = [[0] * 3] * 5 # 이차원 list 생성
l[0][0] = 1 # l[0]에 0번째 요소를 1로 변경
이렇게 0번째 요소만 값을 변경하였는데, 의도와는 다르게 모든 요소의 값이 변경 된 것을 볼 수 있다.
이런 예기치 않은 결과값이 나오는 것을 방지 하기 위해서 list comprehension
을 사용해 볼 수 있겠다.
l = [[0 for _ in range(3)] for _ in range(5)]
위의 곱을 사용한 결과와는 다르게, 의도한대로 0번째 요소의 값만 변경 된 것을 볼 수 있다.
list comprehension
을 사용하면, 각각의 list 객체가 모두 고유한 참조 값을 갖고있음을 보장 받을 수 있다.
이차원 list에서 list 곱을 꼭 활용하여야 겠다면,
이런식으로 활용이 가능하다.
참조
Author And Source
이 문제에 관하여(파이썬 List 곱 (List Multiply) vs List Comprehension), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pilyeooong/파이썬-List-곱-List-Multiply-vs-List-Comprehension저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)