3. 반복문으로 리스트 만들기
- for 반복문과 append를 활용
3-1. for 반복문으로 1차원 리스트 만들기
- for 반복문으로 10번 반복하면서 append로 요소를 추가하면 1차원 리스트를 생성할 수 있다.
a = [] # 빈 리스트 생성 for i in range(10): a.append(0) # append로 요소 추가 print(a) # 실행 결과 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3-2. for 반복문으로 2차원 리스트 만들기
- 2차원 리스트를 만들려면 먼저 세로 크기만큼 반복하면서 안쪽 리스트로 사용할 빈 리스트 line을 만든다.
a = [] # 빈 리스트 생성 for i in range(3): line = [] # 안쪽 리스트로 사용할 빈 리스트 line 생성 for j in range(2): line.append(0) # 안쪽 리스트에 0 추가 a.append(line) # 전체 리스트에 안쪽 리스트를 추가 print(a) # 실행 결과 [[0, 0], [0, 0], [0, 0]]
- 그 다음 가로 크기만큼 반복하면서 line에 append로 0을 추가하고, 바깥쪽 반복문에서는 다시 append로 전체 리스트 a에 안쪽 리스트 line을 추가하면 된다.
- 여기서는 append에 리스트를 넣으면 리스트 안에 리스트가 들어가는 특성을 이용했다.
3-3. 리스트 표현식으로 2차원 리스트 만들기
- 리스트 표현식을 활용하면 코드 한 줄로 2차원 리스트를 만들 수 있다.
>>> a = [[0 for j in range(2)] for i in range(3)] >>> a [[0, 0], [0, 0], [0, 0]]
- 여기서는 리스트 표현식 안에서 리스트 표현식을 사용했다.
- 먼저 [0 for j in range(2)] 로 0을 2번 반복하여 [0, 0]으로 만들고, 다시 for i in range(3) 으로 [0, 0]을 3번 반복하여 [[0, 0], [0, 0], [0, 0]] 으로 만들었다.
- 만약 for 반복문을 한 번만 사용하고 싶다면 식 부분에서 리스트 자체를 곱해주면 된다.
- 즉, 0이 1개 들어있는 리스트 [0]에 2를 곱하면 [0, 0]이 되는데, 이걸 for i in range(3) 으로 3번 반복해주는 것이다.>>> a = [[0] * 2 for i in range(3)] >>> a [[0, 0], [0, 0], [0, 0]]
3-4. 톱니형 리스트 만들기
- 아래는 가로 크기를 알고 있다고 가정하고 만든 리스트이다.
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에 톱니형 리스트의 가로 크기를 미리 저장해 놓았고, 이 리스트 a를 for로 반복하면 가로 크기를 꺼내면서 5번 반복한다.
- for 반복문 안에서 다시 for로 꺼낸 가로 크기인 i 만큼 반복하면서 append로 요소를 추가해준 다음 바깥쪽 반복문에서 리스트 b에 안쪽 리스트 line을 추가하면 된다.
- 이런 긴 코드도 리스트 표현식을 활용하여 간단하게 만들 수 있다.
>>> a = [[0] * i for i in [3, 1, 3, 2, 5]] >>> a [[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]
- 가로 크기가 들어있는 리스트 [3, 1, 3, 2, 5] 에서 꺼낸 숫자만큼 리스트 [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]]
- sorted의 key에 정렬 함수를 지정하여 안쪽 리스트의 요소를 기준으로 정리했다.
- student[1]은 안쪽 리스트의 인덱스 1을 뜻하며 'A', 'B', 'C' 순(알파벳 순서)으로 정렬한다.
- student[2]는 안쪽 리스트의 인덱스 2를 뜻하며 7, 19, 25 순(오름차순)으로 정렬한다.
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 24 정리(1) - 문자열 조작 (0) | 2022.01.28 |
---|---|
파이썬 코딩도장 Unit 23 정리(4) - 2차원 리스트의 할당과 복사 (0) | 2022.01.27 |
파이썬 코딩도장 Unit 23 정리(2) - 2차원 리스트에서의 반복문 사용 (0) | 2022.01.25 |
파이썬 코딩도장 Unit 23 정리(1) - 2차원 리스트 생성 후 요소에 접근하기 (0) | 2022.01.24 |
파이썬 코딩도장 Unit 22 정리(6) - 리스트에 map 사용, 튜플 응용 (0) | 2022.01.23 |