<python> 리스트

jm_yoon·2020년 12월 4일
0

python

목록 보기
6/9

리스트

파이썬에서 리스트는 여러가지 자료를 저장할 수 있는 자료이다.

리스트 선언 = [요소, 요소, 요소, ...]

>>> list_a = [10, 1004, "안녕", "Hello", True, False]
>>> print(list_a)
[10, 1004, '안녕', 'Hello', True, False]
>>> print(type(list_a))
<class 'list'>

리스트는 숫자, 문자열 등 여러 자료형으로 구성되어 있다.

인덱스

각각의 요소는 0부터 시작하는 인덱스가 존재한다.

>>> list_a[0] #대괄호안에 들어간 숫자가 인덱스이다.
10
>>> list_a[1]
1004
>>> list_a[3]
'Hello'
>>> list_a[4]
True
>>> list_a[1:4] #인덱스 1부터 인덱스4 전인 3까지 출력
[1004, '안녕', 'Hello']

인덱스 번호가 음수일 경우 뒤에서부터 요소를 선택할 수 있다.

>>> list_a[-1]
False
>>> list_a[-4]
'안녕'

인덱스 변경

>>> list_a[0] = "변경"
>>> list_a
['변경', 1004, '안녕', 'Hello', True, False]

인덱스 0번에 해당하는 10을 "변경"이라는 문자열로 변경

리스트 이중 사용

list = [첫번째 인덱스][두번째 인덱스]

>>> list_a[2][1]
'녕'
>>> list_a[3][1]
'e'
>>> list_a[3][3]
'l'

list_a[2]를 지정하면 2번째 문자열인 "안녕"을 꺼내오고 list_a[2][1]를 지정하면 2번째에서 가져온 "안녕"에서 다시 첫번째를 가져와 출력한다.

list = [[리스트0], [리스트1], [리스트2], ...]

>>> list_a = [[1, 2, 3], [10, 11,12], [31, 32, 33]]
>>> list_a[1]
[10, 11, 12]
>>> list_a[2][0]
31

list_a는 리스트 3개를 가지는 리스트가 된다.

IndexError 예외

리스트의 길이를 넘는 인덱스로 요소에 접그하려고 할 때 인덱스 에러 예외가 발생한다.

>>> list_a = [2, 46, 567,1004]
>>> list_a[4]
Traceback (most recent call last):
  File "<pyshell#259>", line 1, in <module>
    list_a[4]
IndexError: list index out of range

리스트 연산자

문자열에 적용할 수 있는 연산자는 리스트에서도 활용할 수 있다.

연결(+)

문자열 연결 연산자 (+)를 사용해 리스트들의 자료를 연결한다.

>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> list_a + list_b
[1, 2, 3, 4, 5, 6, 7, 8]

반복(*)

>>> list_a * 3
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

>>> print("list_b 요소 2번 반복 : ", list_b * 2)
list_b 요소 2번 반복 :  [5, 6, 7, 8, 5, 6, 7, 8]

len()

len()함수는 괄호 내붕 문자열을 넣으면 문자열의 글자 수를 세어 주지만 괄호안에 리스트 변수를 넣으면 요소의 개수를 세어 준다.

>>> len(list_a)
4
>>> len(list_b)
4

리스트에 요소 추가, 제거하기

추가하기

리스트에 요소를 추가하는 방법은 두 가지가 있다.

첫번째, 리스트명.append(요소)
두번째, 리스트명.insert(추가할 요소 위치, 요소)

>>> list_a = [1, 2,3, 5]
>>> list_a.append(6)
>>> print("list_a뒤에 요소 추가하기 : ", list_a)
list_a뒤에 요소 추가하기 :  [1, 2, 3, 5, 6]

>>> list_a.insert(3, 4) 
>>> print("list_a중간에 요소 추가하기 : ", list_a)
list_a중간에 요소 추가하기 :  [1, 2, 3, 4, 5, 6]

요소 여러개를 추가할 때에는 extend()함수를 사용한다.

>>> list_a
[1, 2, 3, 4, 5, 6]
>>> list_a.extend([7, 8, 9])
>>> print("list_a에 여러요소 추가하기 : ", list_a)
list_a에 여러요소 추가하기 :  [1, 2, 3, 4, 5, 6, 7, 8, 9]

리스트 연결 연산자와 요소 추가의 차이

원본에 어떠한 영향도 주지 않는 것을 비파괴적이라고 표현하고, .append(), insert(), .extend()함수와 같이 리스트에 직접적인 영향을 주는 함수를 파괴적이라 표현한다.

>>> list_a = [1, 2, 3]
>>> list_b = [4, 5, 6]
>>> print("list연결 연산자 사용 : ", list_a + list_b)
list연결 연산자 사용 :  [1, 2, 3, 4, 5, 6]
>>> list_a #list_a에 영향없음, 비파괴적
[1, 2, 3]
>>> list_b
[4, 5, 6]

>>> list_a = [1, 2, 3]
>>> list_b = [4, 5, 6]
>>> list_a.extend(list_b)
>>> list_a #list_a에 영향있음, 파괴적
[1, 2, 3, 4, 5, 6]
>>> list_b
[4, 5, 6]

제거하기

인덱스로 제거하기 : del, pop

del 리스트명[인덱스] : 리스트의 특정 인덱스에 있는 요소를 제거한다.

>>> list_a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> del list_a[1]
>>> print("del사용하여 리스트의 요소 하나 제거 : ", list_a)
del사용하여 리스트의 요소 하나 제거 :  [1, 3, 4, 5, 6, 7, 8]

>>> list_b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del list_b[1:3] #범위를 지정해 리스트 요소 제거하기
>>> list_b
[1, 4, 5, 6, 7, 8, 9]
>>> del list_b[4:] #4번째 인덱스 기준으로(포함)오른쪽 부분 전부 제거
>>> list_b
[1, 4, 5, 6]
>>> del list_b[:2] #2번째 인덱스 기준으로(불포함) 왼쪽 부분 제거
>>> list_b
[5, 6]

리스트명.pop(제거할 요소 인덱스)

>>> list_a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> list_a.pop(1)
2
>>> print("pop사용하여 리스트의 요소 하나 제거 : ", list_a)
pop사용하여 리스트의 요소 하나 제거 :  [1, 3, 4, 5, 6, 7, 8]

>>> list_a.pop() 
8
>>> print("pop사용하여 리스트의 요소 하나 제거 : ", list_a)
pop사용하여 리스트의 요소 하나 제거 :  [1, 3, 4, 5, 6, 7]

함수의 매개변수에 아무 것도 입력하지 않으면 자동으로 -1이 들어가 맨 마지막 요소가 제거된다

값으로 제거하기 : remove

리스트.remove(값)

>>> list_c = [1, 5, 2, 3] #리스트 선언
>>> list_c.remove(5) #리스트 요소를 값으로 제거하기
>>> list_c
[1, 2, 3]

모두 제거하기: clear

리스트 내부의 요소를 모두 제거할 때 clear()함수를 사용한다.

리스트.clear()

>>> list_c
[1, 2, 3]
>>> list_c.clear()
>>> list_c
[]

리스트 내부에 있는지 확인하기

특정 값이 리스트 내부에 있는지 확인하는 방법으로 in연산자를 사용한다.

값 in 리스트 : 특정값이 리스트 안에 있는지 확인
값 not in 리스트 : 특정값이 리스트 안에 없는지 확인

>>> list_a = ['사과', '바나나', '키위', '수박', '귤']
>>> '수박' in list_a
True
>>> "사과" in list_a
True
>>> "포도" in list_a
False
>>> "복숭아" not in list_a
True
>>> "바나나" not in list_a
False
profile
Hello!

0개의 댓글