1. 기본문법
- 요소 추출 : 리스트[세로인덱스][가로인덱스]
- 요소 값 할당 : 리스트[세로인덱스][가로인덱스] = 값
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> a[2][1] # 출력 : 세로 인덱스 2, 가로 인덱스 0인 요소
60
>>> a[0][1] = 1000 # 값 할당 : 세로 인덱스 0, 가로 인덱스 1인 요소에
>>> a[0][1]
1000
- 2차원 리스트와 튜플 수정 가능여부
a = ((10, 20), (30, 40), (50, 60)) # 튜플 안에 튜플을 넣은 2차원 튜플
b = ([10, 20], [30, 40], [50, 60]) # 튜플 안에 리스트를 넣음
c = [(10, 20), (30, 40), (50, 60)] # 리스트 안에 튜플을 넣음
a[0][0] = 500 # 안쪽 튜플은 변경할 수 없음. TypeError 발생
a[0] = (500, 600) # 바깥쪽 튜플은 변경할 수 없음. TypeError 발생
b[0][0] = 500 # 안쪽 리스트는 변경할 수 있음
b[0] = (500, 600) # 바깥쪽 튜플은 변경할 수 없음. TypeError 발생
c[0][0] = 500 # 안쪽 튜플은 변경할 수 없음. TypeError 발생
c[0] = (500, 600) # 바깥쪽 리스트는 변경할 수 있음
- pprint (함수명, indent, width) : 보기좋게 출력하는 library. import 해야함.
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> a
[[10, 20], [30, 40], [50, 60]]
>>> from pprint import pprint
>>> pprint(a, indent=4, width=20) # 들여쓰기칸수는 4, 가로폭은 20
[ [10, 20],
[30, 40],
[50, 60]]
2. for문
# for문 1번 사용
a = [[10, 20], [30, 40], [50, 60]]
for x, y in a: # 리스트의 가로 한 줄(안쪽 리스트)에서 요소 두 개를 꺼냄
print(x, y)
10 20
30 40
50 60
# for문 2번 사용
for i in a: # a에서 안쪽 리스트를 꺼냄
for j in i: # 안쪽 리스트에서 요소를 하나씩 꺼냄
print(j, end=' ')
print()
#for와 range 사용하기
a = [[10, 20], [30, 40], [50, 60]]
for i in range(len(a)): # 세로 크기 i = range(3)
for j in range(len(a[i])): # 가로 크기 j = range(2)
print(a[i][j], end=' ')
print()
# while문 2번
i = 0
while i < len(a): # 세로 크기
j = 0
while j < len(a[i]): # 가로 크기
print(a[i][j], end=' ')
j += 1 # 가로 인덱스를 1 증가시킴
print()
i += 1 # 세로 인덱스를 1 증가시킴
- 리스트 표현식으로 코드 간단히 하기
a = [3, 1, 3, 2, 5] # 가로 크기를 저장한 리스트
b = [] # 빈 리스트 생성
for i in a: # 가로 크기를 저장한 리스트로 반복
line = [] # 안쪽 리스트로 사용할 빈 리스트 생성
for j in range(i): # 리스트 a에 저장된 가로 크기만큼 반복
line.append(0)
b.append(line) # 리스트 b에 안쪽 리스트를 추가
print(b)
[[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]
# 이렇게 바꾸기
>>> a = [[0] * i for i in [3, 1, 3, 2, 5]]
>>> a
# 다른예시
>>> a = [[0 for j in range(2)] for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]
참고 | sorted로 2차원 리스트 정렬하기
2차원 리스트를 정렬할 때는 sorted 함수를 사용합니다.
sorted(반복가능한객체, key=정렬함수, reverse=True 또는 False)
다음은 학생 정보가 저장된 2차원 리스트를 정렬합니다.
students = [
['john', 'C', 19],
['maria', 'A', 25],
['andrew', 'B', 7]
]
print(sorted(students, key=lambda student: student[1])) # 안쪽 리스트의 인덱스 1을 기준으로 정렬
print(sorted(students, key=lambda student: student[2])) # 안쪽 리스트의 인덱스 2를 기준으로 정렬
실행 결과
[['maria', 'A', 25], ['andrew', 'B', 7], ['john', 'C', 19]]
[['andrew', 'B', 7], ['john', 'C', 19], ['maria', 'A', 25]]
- deepcopy() : copy와 같이 리스트를 복사하는 것이지만 1차원만 통함. deep을 해야 2차원리스트가 정확히 복사됨.
# copy
>>> a = [[10, 20], [30, 40]]
>>> b = a.copy()
>>> b[0][0] = 500
>>> a
[[500, 20], [30, 40]]
>>> b
[[500, 20], [30, 40]] # b도 따라서 영향을 받아버렸음..
# deepcopy
>>> a = [[10, 20], [30, 40]]
>>> import copy # copy 모듈을 가져옴
>>> b = copy.deepcopy(a) # copy.deepcopy 함수를 사용하여 깊은 복사
>>> b[0][0] = 500
>>> a
[[10, 20], [30, 40]]
>>> b
[[500, 20], [30, 40]]
728x90
'Study (Data Science) > Python' 카테고리의 다른 글
프로그래머스) 두 수의 차 (0) | 2022.11.27 |
---|---|
Unit24. 문자열 함수, 포매팅, format함수, %d (1) | 2022.11.26 |
Unit 22. List 와 Tuple / 리스트표현식(list comprehension) (1) | 2022.11.25 |
참고) Stack & Queue (0) | 2022.11.25 |
Fund 4. Github에 Git Push 하기 (Git & Github의 차이점) (0) | 2022.11.25 |
댓글