‘리스트’란
여러 개의 데이터가 저장되어 있는 자료형으로 []
를 사용하여 선언합니다. 파이썬의 리스트는 다른 프로그래밍 언어에서 사용되는 ‘배열’과 유사합니다.
- 하나의 이름과 인덱스를 통해 각 원소들에 접근
- 요소들이 순서를 가짐 :
시퀀스 자료형
- 순회 접근 가능
- 다른 자료형끼리
리스트를 만드는 방법은 다음과 같습니다.
#1. [ ] 안에 요소 나열
a1 = [1, 2, 4, 5, 8]
a2 = [] #빈 리스트 생성
#2. list() 클래스 사용
b1 = 'hello'
b2 = list(b1) #['h', 'e', 'l', 'l', 'o']
b3 = list(range(0, 5)) #[0, 1, 2, 3, 4]
b4 = list(t(1, 2, 4)) #[1, 2, 4]
#3 문자열의 split() 함수 사용
c1 = 'bye bye'
c2 = c1.split() # ['bye', 'bye']
위에서 언급한 시퀀스 자료형
이란 순서를 가지는 요소들로 구성된 자료형을 말합니다.
대표적인 예로 리스트, 문자열, 튜플, ranage객체 등이 해당되는데요, 이를 이용한 것이 #2예제 입니다. list()클래스를 통해 문자열을 리스트 형식으로 쉽게 변형할 수 있습니다. 둘 다 시퀀스 자료형이기 때문입니다.
예제 #3번의 split()함수는 파이썬 내장 함수로서 해당 문자열을 특정 문자(보통은 공백)를 기준으로 끊어서 list형태로 바꿔줍니다.
연산 종류
리스트 자료형이 사용할 수 있는 함수나 연산자에는 무엇이 있나 알아봅시다.
-
len() 해당 리스트의 요소의 개수, 즉 리스트의 길이를 반환합니다.
-
시퀀스 연결 및 반복
리스트 + 리스트
: 두 개의 리스트를 합칠 수 있습니다.
리스트 * 숫자
: 리스트를 해당 수 만큼 반복하여 새로운 리스트를 만들 수 있습니다. -
in, not in
요소 in 리스트
: 특정 요소가 리스트 안에 존재하는지 검사합니다. 존재하면 True, 존재하지 않으면 False를 반환.
요소 not in 리스트
: in과 반대로 특정 요소가 리스트 안에 없는지 검사합니다. 존재하면 False, 존재하지 않으면 True 반환.
in 과 not in 연산의 시간복잡도는 **O(N)** 알고리즘 문제를 풀면서 코드의 효율성도 생각해야 하다 보니 시간복잡도를 무시할 수 없었다. in, not in 연산의 경우 리스트의 처음부터 끝 요소까지 쭉 돌면서 해당 값이 존재하는지 검사한다. 즉, 리스트 요소 개수(n)만큼 순회를 하게 된다.
- 인덱싱 리스트는 하나의 이름과 인덱스 번호로 각 요소를 접근할 수 있다고 했습니다. 이런 특징이 ‘인덱싱을 할 수 있다’라는 말과 같습니다.
관련 함수로는index()
가 있습니다. ```python memo_list = [“aa”, “bb”, “cc”] #라는 리스트가 있을 때 memo_list[0] #0번째 요소 aa를 의미 memo_list[2] #2번째 요소 cc를 의미 #와 같이 인덱스 번호로 각 요소들에 접근이 가능하다.
memo_list.index(“bb”) #bb의 인덱스인 1을 반환
응용하여 리스트 내의 일부 범위 만큼을 선택하는 연산도 가능합니다. 이를 슬라이싱(slicing)이라고 합니다.
```python
a = [10, 11, 12, 1, 2, 3, 55, 33, 54]
print(a[3:6]) #[1, 2, 3]
a라는 리스트에서 3번째 요소부터 6번째 요소까지를 반환하는 예제입니다.
-
min(), max() min([11, 3, 5]) 의 결과는 3, max([11, 3, 5]) 의 결과는 11
과 같이 리스트에서 가장 작은 수, 가장 큰 수를 반환해주는 함수입니다. - for루프를 통한 순회 for반복문을 사용하여 리스트의 모든 요소를 순회할 수 있습니다. 이것은 특정 값을 찾기 위해 모든 요소를 접근해야 하거나, 모든 요소를 출력해야 하는 경우 등에 사용되는 방법입니다.
test = [0,1,2,3,4,5,6] for i in test: print(i)
-
append(), insert() 리스트의 가장 끝부분에 요소를 ‘추가’하고자 할 때 append()함수를 사용합니다. 형식은
리스트.append(요소)
와 같이 씁니다.
리스트의 특정 위치에 요소를 ‘삽입’하고자 할 때는 insert()함수를 사용합니다. 형식은리스트.insert(인덱스, 요소)
와 같이 씁니다. - pop(), remove() 리스트의 요소를 삭제하고자 할 때는 pop()함수를 사용합니다.
이때리스트.pop()
을 쓰면 가장 뒤에 있는 요소를,리스트.pop(인덱스)
를 써주면 해당 인덱스 위치에 있는 요소를 삭제합니다.
또 다른 삭제 방법은 remove()함수 입니다.
pop함수와 달리 요소값을 직접 입력하여 제거합니다. 리스트.remove(요소)
와 같이 사용합니다.
두 함수의 차이는 반환값의 유무인데요, pop()은 제거된 항목을 반환하고 remove()는 반환없이 오직 제거만 한다는 것! 알아두시면 좋겠습니다.
- sort(), sorted()
리스트.sort()
는 리스트를 오름차순으로 정렬합니다. 이와 비슷한 함수로sorted(리스트)
가 사용되는데, 둘의 차이는 반환값의 유무입니다.
sort()는 반환값이 None. 즉, 원본 리스트의 순서를 바꾸는 것인 반면
sorted()는 원본 리스트를 정렬한 새로운 리스트를 반환합니다. 즉, 원본 리스트는 그대로 존재하며 별개의 리스트가 생성되는 것이죠.
내림차순으로 정렬하고자 할 때는 다음과 같이 써주면 됩니다.
sorted(리스트, reverse=True)
sorted(문자열 리스트, key=str.lower)
: 문자를 사전순서로 정렬할 때
연산 시간은 새로운 리스트를 만들지 않는 sort()가 sorted()보다 빠릅니다.