리스트 자료형

honeyricecake·2022년 6월 26일
0

파이썬

목록 보기
2/26

리스트를 사용하면 1,3,5,7,9 숫자 모음을 다음과 같이 간단하게 표현할 수 있다.

odd = [1,3,5,7,9]

리스트를 만들 때는 위에서 보는 것과 같이 대괄호 ([])로 감싸 주고 각 요솟값은 쉼표(,)로 구분해준다.

여러가지 리스트의 생김새를 살펴보면 다음과 같다.

리스트는 a처럼 아무것도 포함하지 않아 비어 있는 리스트일 수도 있고, b처럼 숫자를 요소값으로 가질 수 도 있고 c처럼 문자열을 요솟값으로 가질 수도 있다.
또한 d처럼 숫자와 문자열을 함께 요솟값으로 가질 수도 있으며, e처럼 리스트 자체를 요솟값으로 가질 수도 있다.

즉,리스트 안에는 어떠한 자료형도 포함시킬 수 있다.

(비어 있는 리스트는 a = list()로 생성할 수도 있다.)

리스트의 인덱싱과 슬라이싱

리스트는 C언어, 자바의 배열과 같고 인덱싱을 어떻게 하는지는 우리도 익히 잘 알고 있다.

그래도 한번 연습해보도록 하자.

여기서 "Life"는 a[2][2][0]으로 얻을 수 있다.

리스트의 슬라이싱

문자열과 마찬가지로 리스트에서도 슬라이싱 기법을 적용할 수 있다.
슬라이싱은 '나눈다'는 뜻이라고 했다.

a = [1,2,3,4,5]
b = a[0,2]

-> b는 [1,2]가 된다.

중첩된 리스트에서도 똑같이 슬라이싱할 수 있다.

a = [1,2,3,['a','b','c']] 에서 a[3]은 ['a','b','c']를 의미한다.

리스트 연산하기

리스트 역시 + 기호를 통해서 더할 수 있고 * 기호를 통해서 반복할 수 있다.

a = [1,2,3]
b = [4,5,6]
c = a + b

c는 [1,2,3,4,5,6]이 된다.

리스트 반복하기

a = [1,2,3]
c = a * 3

c는 [1,2,3,1,2,3,1,2,3]이 된다.

리스트 길이 구하기

a = [1,2,3] 이면 len(a) = 3이다.

초보자가 범하기 쉬운 리스트 연산 오류

다음 소스 코드를 입력했을 때 결괏값은 어떻게 나올까?

a = [1,2,3]
printf(a[2] + "hi")

위와 같은 에러가 출력됨을 알 수 있다.

이는 + 연산자에 대해 피연산자들의 타입이 정의되지 않았다는 것인데
즉, 정수와 문자열의 + 연산은 정의되지 않았다는 것이다.

이를 3hi 가 출력되게 하려면 다음과 같이 해야한다.

print(str(a[2]) + "hi")

str 함수는 정수나 실수를 문자열 형태로 바꾸어 주는 파이썬의 내장 함수이다.

리스트의 수정과 삭제

리스트에서 값수정하기

a = [1,2,3]
a[2] = 4

리스트가 a = [1,2,4]로 바뀌게 된다.

del 함수 사용해 리스트 요소 삭제하기

a = [1,2,3]
del a[1]

리스트 a는 [1,3]이 된다.

del 함수는 다음과 같이 사용한다.

del 객체
이 때 객체란 파이썬에서 사용되는 모든 자료형을 말한다.

다음처럼 슬라이싱 기법을 사용하여 리스트의 요소 여러개를 한꺼번에 삭제할 수 있다.

a = [1,2,3,4,5,6]
del a[2:4]
print(a)

이렇게 1,2,5,6 이 출력됨을 볼 수 있다.

리스트의 요소를 삭제하는 법은 두가지가 더 있다.
바로 remove 와 pop 함수를 사용하는 방법인데 이것에 대해서는 바로 이어지는 리스트 관련 함수에서 설명한다.

리스트 관련 함수들

리스트에 요소 추가(append)

리스트의 맨 마지막에 요소를 추가하는 것이다.

ex.

a = [1,2,3,4]
a.append([5,6])

a는 [1,2,3,4,[5,6]] 이 된다.

리스트 정렬 (sort)

숫자는 숫자 순서대로 문자는 문자 순서대로 정렬해준다.

리스트 뒤집기 (reverse)

리스트를 역순으로 뒤집어준다(!!)
(C언어는 반복문으로 알아서 뒤집어야 하는데 충격이 아닐 수 없다.)

a = ['a', 'c', 'b']
a.reverse()

a는 ['b','c','a'] 가 된다.

위치 반환(index)

ex.

a = [1,2,3]
print(a.index(3))
print(a.index(1))
print(a.index(4))

결과 :

리스트 a에 값 4가 존재하지 않아 에러가 발생한다.
ValueError: 4 is not in list

리스트에 요소 삽입(insert)

insert(a,b)는 a번째 위치에 b를 삽입하는 함수이다.

a = [1,2,3]
a.insert(1,4)

a는 [1,4,2,3] 이 된다.
간단해보이지만 무려 O(n)짜리 작업이다.
자중하는 것이 좋다.

리스트 요소 제거(romove)

remove(x)는 리스트에서 첫번째로 나오는 x를 삭제하는 함수이다.

이 역시 간단해보이지만 O(n)짜리 작업이다.

리스트 요소 끄집어내기(pop)

pop은 리스트의 맨마지막요소를 삭제하면서 리턴하는 함수이다.
큐랑 햇갈려서는 안된다.

a = [1,2,3,4]
print(a.pop())
print(a)

리스트에 포함된 요소 x의 개수 세기(count)

count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려주는 함수이다.

a = [1,2,3,1]
print(a.count(1))

2 가 출력됨을 볼 수 있다.

리스트 확장(extend)

extend(x)에서 x는 리스트만 올 수 있으며 원래의 a리스트에 x리스트를 더라게 된다.

(a.append(x)가 요소로 리스트를 추가한다! 이와는 확실히 다른 함수!!)

a = [1,2,3,4]
b = [5,6,7]
a.extend(b)
print(a)

잠깐!

a = [1,2,3,4]
b = [5,6,7]
print(a.extend(b))

이는 왜 None이 출력될까?

이유 : a는 제자리함수 즉, 리스트 변수 a자체에 5,6,7을 추가한 리스트를 할당하므로, a.extend(b)는 None을 리턴한다.

insert함수 등도 마찬가지!

함수 자체는 아무것도 리턴하지 않고 함수 내에서

a라는 변수에 작업이 끝난 리스트의 레퍼런스 할당

이라는 과정을 모두 수행한다.

0개의 댓글