- 리스트(List) = 여러 요소들의 집합을 저장하는 자료형.
# 새로운 원소를 추가하거나 갱신, 삭제하는 일이 가능하며 리스트 요소들은 값을 변경할 수 있는 Mutable한 데이터 타입입니다.
개념 | 형태 | 뜻 |
리스트(List) | A = [a,b,c] A = list(B) A = 리스트 B= iterable 데이터 |
변수에 여러개의 데이터를 저장한 것. # list() 형태를 사용할 때에는 반드시 () 안에는 iterable한 데이터(튜플, 딕셔너리,문자열, 집합)를 사용해야함. ☆Iterable = 반복가능한. → 원소를 하나씩 쪼개어 차례로 반환할 수 있는 객체.(문자열, 리스트, 튜플, 딕셔너리) Iterable한 객체는 for문제 하나씩 사용 가능함. |
a = [3,'BTS','강']
print(a)
[3, 'BTS', '강']
3-(1) 리스트의 기본 특징
- []를 한 줄로 인식
: 줄을 바꿔도 []는 한줄로 인식합니다.
a = [3,
'BTS',
'강']
print(a)
[3, 'BTS', '강']
- 인덱스(Index)
: 자동으로 번호, 순서(인덱스)를 부여합니다.
a = [3,'BTS','강'] # a=[인덱스0, 인덱스1, 인덱스2]
print(a[1]) # 두번째 데이터(인덱스=1)를 출력해.
BTS
- 인덱스 -1
: 리스트 마지막 데이터의 인덱스는 -1과 같습니다.
a = [3,'BTS','강']
print(a[-1])
강
- 비어있는 리스트
: 비어있는 리스트를 만드는 방법은 2가지가 있습니다.
① a = []
② a= list()
- 리스트 속 리스트
: 리스트 안에 리스트를 저장할 수 있습니다.
a = [1,2,[3,4,5]]
print(a)
print(a[2])
print(a[2][1])
[1, 2, [3, 4, 5]]
[3, 4, 5]
4
3-(2) 리스트 데이터 일부 자르기(Slicing)
개념 | 형태 | 뜻 |
슬라이싱 (Slicing) |
A[n : m] A = 리스트 [n : m] = n ~ m-1 [n :] = n ~ 끝 [: m] = 처음 ~ m-1 |
리스트의 데이터를 잘라서 리스트 형식으로 반환해. |
A [n : m : k] A = 리스트 k = 간격 |
리스트 A에서 n~m-1 범위의 데이터를 k간격으로 슬라이싱해. 단, k의 부호는 출발 방향(+는 왼쪽부터 / -는 오른쪽부터) |
a = [3,'BTS','강']
print(a[0:2]) # print(a[ : ]) = [3,’BTS’,’강’]
[3, 'BTS']
# 슬라이싱 0은 생략가능힙니다.
a = [1,2,3,4,5,6]
b = a[0:4:2]
c = a[4:0:-1] # 4~1 데이터를 오른쪽부터 1간격으로 슬라이싱
print(b)
print(c)
[1, 3]
[5, 4, 3, 2]
문자열 슬라이싱과 리스트 슬라이싱
- 문자열 Slicing ⇒ 반환값 = 문자열(str)
a = 'abc'
print(a[0])
print(type(a[0]))
print(a[0:1])
print(type(a[0:1]))
a
<class 'str'>
a
<class 'str'>
- 리스트 Slicing ⇒ 반환값 = 리스트(list)
a = [0,1,2]
print(a[0])
print(type(a[0]))
print(a[0:1])
print(type(a[0:1]))
0
<class 'int'>
[0]
<class 'list'>
3-(3) 리스트 연산
리스트 더하기
: '+' 연산자를 이용해 두 리스트를 연결합니다.
a = [1,2,3]
b = [3,4,5]
print(a+b)
[1, 2, 3, 3, 4, 5]
- extend
함수 | 내용 | |
이름 | extend | |
설명 | 리스트A 뒤에 리스트B를 붙여 확장해. | |
형태 | A.extend(B) | |
인자 | A,B = 리스트 | |
반환 | return 리스트 |
a = [1,2,3]
b = [3,4,5]
a.extend(b)
print(a)
[1, 2, 3, 3, 4, 5]
리스트 곱하기
: '*' 연산자를 이용해 해당 리스트를 반복합니다.
a = [1,2,3]
print(a*3)
[1, 2, 3, 1, 2, 3, 1, 2, 3]
3-(4) 리스트 수정
① 인덱스로 하나의 값 수정하기
a = [1,2,3]
a[2]=4
print(a)
[1, 2, 4]
② 슬라이싱으로 연속된 범위의 값 수정하기
a = [1,2,3]
a[1:2] = ['a','b','c']
print(a)
[1, 'a', 'b', 'c', 3]
리스트 데이터 추가하기
- append
함수 | 내용 | |
이름 | append | |
설명 | a 데이터를 리스트 제일 마지막에 추가해. | |
형태 | A.append(a) | |
인자 | A = 리스트 a = 추가할 데이터 |
|
반환 | 반환없음. |
a=[1,2,4]
a.append(8) # 8을 a리스트 제일 마지막에 추가해.
print(a)
[1, 2, 4, 8]
- insert
함수 | 내용 | |
이름 | insert | |
설명 | a 데이터를 인덱스n 데이터 앞에 추가해. | |
형태 | A.insert(n,a) | |
인자 | A = 리스트 n = 추가할 인덱스 위치 a = 추가할 데이터 |
|
반환 | 반환없음. |
a=[1,2,4]
a.insert(2,8) # 8을 a리스트 인덱스2 앞에 추가해.
print(a)
[1, 2, 8, 4]
리스트 데이터 삭제하기
- pop
함수 | 내용 | |
이름 | pop | |
설명 | n 인덱스에 위치한 데이터를 밖으로 빼. | |
형태 | A.pop(n) | |
인자 | A = 리스트 n = 삭제할 데이터의 인덱스 |
|
반환 | return A[n] |
a=[1,2,4]
a.pop(0)
print(a)
[2, 4]
① pop() = pop(마지막 인덱스 번호)
a=[1,2,4]
a.pop()
print(a)
[1, 2]
② 밖으로 뺀 데이터를 다른 곳으로 저장 가능
a=[1,2,4]
b=a.pop(0)
print(a)
print(b)
[2, 4]
1
- remove
함수 | 내용 | |
이름 | remove | |
설명 | 리스트 A 안에 x데이터를 삭제해. 단, x데이터가 여러개일 경우 제일 첫 번째로 등장하는 x만 삭제함. |
|
형태 | A.remove(x) | |
인자 | A = 리스트 x = 삭제할 데이터 |
|
반환 | 반환없음. |
a = [1,2,3,1,2,3]
a.remove(3)
print(a)
[1, 2, 1, 2, 3]
- 빈 리스트 사용
함수 | 내용 | |
이름 | 빈 리스트 사용 | |
설명 | n:m 범위의 데이터를 빈 리스트 []로 대체해. | |
형태 | A[n:m] = [ ] |
|
인자 | A = 리스트 n:m = 삭제 범위 |
|
반환 | 반환없음. |
a = [1,2,4]
a[1:2] = []
print(a)
[1, 4]
a = [1,2,4]
a[1] = []
print(a)
[1, [], 4]
# 빈 리스트 []로 대체하고자 하는 데이터를 인덱스로 표현하면 []가 삽입됩니다.
- del
함수 | 내용 | |
이름 | del | |
설명 | 리스트 A의 인덱스 n에 해당하는 데이터 또는 n”m 범위의 데이터를 삭제해. | |
형태 | del A[n] del A[n:m] |
|
인자 | A = 리스트 n = 삭제하고자 하는 데이터의 인덱스 n:m = 삭제하고자 하는 데이터 범위 |
|
반환 | 반환없음. |
a = [1,2,4]
b = [5,6,7]
del a[1]
del b[0:2]
print(a)
print(b)
[1, 4]
[7]
3-(5) 리스트 관련 함수
- len
함수 | 내용 | |
이름 | len | |
설명 | A 리스트의 길이를 반환해줘. | |
형태 | len(A) | |
인자 | A = 리스트 | |
반환 | return 숫자(정수) |
a = [1,2,3]
print(len(a))
3
- reverse
함수 | 내용 | |
이름 | reverse | |
설명 | A 리스트의 데이터의 순서를 반대로 뒤집어. | |
형태 | A.reverse() | |
인자 | A = 리스트 | |
반환 | return 리스트 |
a = [1,2,4]
a.reverse()
print(a)
[4, 2, 1]
- sort
함수 | 내용 | |
이름 | sort | |
설명 | A 리스트의 데이터의 순서를 오름차순으로 정렬해. 단, 문자는 사전순으로 정렬. A 리스트의 데이터의 순서를 내림차순으로 정렬해. 단, 문자는 사전 역순으로 정렬. |
|
형태 | A.sort() A.sort(reverse=True) |
|
인자 | A = 리스트 | |
반환 | return 리스트 |
a = [1,2,4]
a.sort(reverse=True)
print(a)
[4, 2, 1]
- index
함수 | 내용 | |
이름 | index | |
설명 | A 리스트에 x 값이 있으면 x의 인덱스를 반환해줘. 단, 리스트 A 안에 x값이 없으면 Error |
|
형태 | A.index(x) | |
인자 | A = 리스트 x = 찾고자하는 데이터값 |
|
반환 | return 숫자(정수) |
a = [1,2,3]
print(a.index(2))
1
- count
함수 | 내용 | |
이름 | count | |
설명 | 리스트 A 안에 데이터x가 몇개 포함되어 있는지 반환해줘. | |
형태 | A.count(x) | |
인자 | A = 리스트 x = 세고자 하는 데이터 |
|
반환 | return 숫자(정수) |
a = [1,2,1,2,3]
print(a.count(1))
2
3-(6) 리스트 내포
- 리스트 내포 (LIst comprehension) = 조건문(for문, if문)을 리스트 안에 배치하여 조건문의 반환값을 원소로 하는 리스트를 생성하는 방법.
개념 | 형태 | 뜻 |
리스트 내포 | List = [A 조건문1 조건문2 조건문3...] = [A 조건문1 조건문2 조건문3 …] A = 반환값 |
조건문1의 조건문2를 실행한 A의 반환값을 원소하는 리스트를 만들어. |
ex1) 리스트 내포 사용X
meter = [3, 7, 9, 10]
centi_meter = []
for i in meter :
if i%2 != 0 :
centi_meter.append(100*i)
print(centi_meter)
[300, 700, 900]
ex1) 리스트 내포 사용O
meter = [3, 7, 9, 10]
centi_meter = [100*i for i in meter if i%2 != 0]
print(centi_meter)
[300, 700, 900]
ex2) 리스트 내포 사용X
num = [1,2,3,4,5]
result = []
for n in num:
if n%2 == 1:
if n < 4:
result.append(n*10)
print(result)
[10, 30]
ex2) 리스트 내포 사용O
num = [1,2,3,4,5]
result = []
result = [n*10 for n in num
if n%2 == 1
if n < 4]
print(result)
[10, 30]
위와 같이 리스트 내포를 사용하면 가독성은 떨어지지만 훨씬 짧은 코드로 내용을 담을 수 있습니다. 짧고 간결한 코드는 알고리즘의 실행 속도와 효율성을 의미하므로 매우 중요한 부분입니다. 리스트 내포를 사용하지 않았을 때와 사용했을 때의 실행 속도 차이는 다음과 같습니다.
리스트 내포 사용X 실행시간
import time
first_time=time.time()
meter = [3,7,9,10]*999999
centi_meter=[]
for i in meter:
if i%2 != 0:
centi_meter.append(100*i)
last_time=time.time()
time_imterval = last_time-first_time
print("실행 시간: "+str(time_imterval))
실행 시간: 0.9592478275299072
리스트 내포 사용O 실행시간
import time
first_time=time.time()
meter=[3,7,9,10]*999999
centi_meter=[100*i for i in meter if i%2 != 0]
last_time=time.time()
time_imterval = last_time-first_time
print("실행 시간: "+str(time_imterval))
실행 시간: 0.559654951095581
*참고 : 점프 투 파이썬
'Programming Language > Python' 카테고리의 다른 글
Ⅱ. 자료형 (5. 딕셔너리) (0) | 2022.08.29 |
---|---|
Ⅱ. 자료형 (4. 튜플) (0) | 2022.08.22 |
Ⅱ. 자료형 (2. 문자열) (0) | 2022.05.28 |
Ⅱ. 자료형 (1. 숫자형) (0) | 2022.04.27 |
Ⅰ. Python의 이해 (5. 파이썬 개발환경) (0) | 2022.04.24 |