본문 바로가기

Data analysis story

[Python]- 파이썬 자료형, 리스트(리스트 생성, list()함수, 혼합 자료형 리스트, 내장 리스트, 리스트의 인덱싱과 슬라이싱, 내장 리스트 인덱싱과 슬라이싱, 리스트의 연산[더하기, 곱하기], 리스..

안녕하세요! 여러분!!

오늘은 파이썬의 자료형”, 그 두번째 시간으로!!

“리스트”에 대해서 배워보도록 합시다!!

저번 시간까지 파이썬의 자료형 중 숫자와 문자열에 대해서 알아보았는데요!

숫자와 문자열만 가지고 프로그래밍을 하기에는 부족한 점이 많습니다!!

왜나고요??

 

예를 들어 1부터 100까지 숫자 중 짝수인 수를 모아서

하나의 변수에 할당하려고 한다고 해봅시다!

이런 숫자 모음을 숫자나 문자열로 표현하기에는 무리가 있네요.

 

하지만 “파이썬은 여러 개의 값을 모아서

하나의 변수에 저장할 수 있도록 해주는 자료형”을 제공합니다.

이를 바로 “리스트(List)”라고 하는 것이죠!

 

리스트는 여러 값에 대해 하나의 이름을 공유하기 때문에 값들을 조작이 편리하므로

꼭 필요한 자료형이라고 할 수 있습니다.

 

리스트 생성

리스트는 [ ] 안에 값을 나열하고 값과 값 사이에 콤마를 찍으면 되는데요!

이렇게 말이죠!

 

예를 들어 보겠습니다!

 

scores라는 변수는 10명 학생들의 성적 모음을 저장한 리스트 자료형을 가지고 있고요!

shopping_list라는 변수는 사야 할 물품의 모음을 저장한 리스트 자료형을 가지고 있습니다!

 

여러 종류의 리스트

그러면 여러 가지 리스트의 생김새를 살펴보죠!

a는 아무것도 없는 빈 리스트이고

b는 숫자 값들을 가진 리스트

c는 문자 값들을 가진 리스트네요!

 

따라서 정리해보면 리스트에는 아무런 값이 들어가지 않을 수도 있고,

숫자, 혹은 문자들의 값들이 들어갈 수도 있답니다.

 

혹은 list()라는 함수를 만들어서 생성할 수도 있답니다!

이렇게요!!

 

결과값은 아까 []를 사용해서 만든 것과 같죠?

 

그리고 리스트 안의 값은 꼭 한 가지 자료형으로만 이루어져야 하는 것은 아닙니다!

이렇게 혼합 자료형을 사용해도 됩니다!

 

그렇다면 리스트 안에 리스트가 생성될 수도 있을까요?

! 가능합니다. 예를 보여드리죠!

리스트 안에 리스트 자료형이 내장되어 있네요!

 

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

리스트 역시 문자열처럼 인덱싱을 적용할 수 있습니다!

그리고 주소도 역시 같은 방법으로 적용되는데요!

 

첫번째에 있는 값이 0이라는 주소를 갖게 되고,

두 번째에 있는 값이 1이라는 주소를 갖게 되는 구조입니다!

 

저번 포스팅의 문자열 인덱싱을 잘 이해했다면 아주 쉬울거에요!

([Python] 파이썬 자료형- 문자열 편 참고)

이런 리스트가 있을 때 첫번째 값을 인덱싱하고 싶으면

이렇게 하면 됩니다!

그림으로 이해해볼까요?

분홍색 표에 있는 숫자들은 리스트를 뒤에서부터 세고 싶을 때의 숫자들인 거

다들 저번 주 문자열 인덱싱에서 배워서 아시죠?

 

그럼 아까 배운 리스트 안에 리스트가 있는 그런 리스트 들은

어떻게 인덱싱할까요?

예를 들어

이렇게 안에 리스트가 내장되어 있는 리스트가 있다고 해봅시다.

 

이 때 양배추를 뽑고 싶다면 어떻게 해야할까요?

shopping_list에선 야채의 주소가 0, [“두부”, “양배추”]의 주소가 1, “과일의 주소가 2, [“딸기”, “사과”, “토마토”]

주소가 3입니다.

그렇죠?

따라서 양배추를 뽑고 싶다면 일단 [“두부”, “양배추]를 불러와야겠죠?

 

그러고 봤더니, [“두부”, “양배추]도 어쨌든 리스트네요!

이 내장 리스트에서는 두부의 주소가 0, “양배추의 주소가 1이므로

먼저 shopping_list[0]으로 [“두부”, “양배추]를 뽑고, 이 내장리스트에서 또 1의 주소를 가진 양배추를 뽑기 위해선

이렇게 인덱싱 해주면 된답니다!

 

이제 슬라이싱을 해보죠!

역시나 문자열에서 했던 슬라이싱 기법을 리스트에 그대로 적용하면 됩니다!

문자열과 마찬가지로 3번 주소에 있는 사과는 슬라이싱 되지 않네요!

2번 주소 까지만 되는 것도 다 아시죠??

 

 

리스트 안에 리스트가 있는 리스트의 슬라이싱도 어렵지 않습니다!

제가 문자열 슬라이싱에서 끝 숫자를 쓰지 않으면 시작 숫자부터 문자의 끝까지 출력된다고 말씀드렸죠?

 

리스트에서도 역시 마찬가지므로

[“두부”, “양배추”] 모두 슬라이싱된 것입니다!

리스트의 연산

리스트 역시 +기호를 이용해서 더할 수 있고,

* 기호를 이용해서 반복할 수 있습니다. 문자열처럼요!

예시를 볼게요!

이번엔 반복하는 예시를 보죠!

리스트의 수정, 변경

저번 시간에 문자열의 요소들은 바꿀 수 있는 요소가 아니라고 했었습니다!

하지만 리스트의 요소들은 변경 가능합니다!

예를 들어 볼게요!

 

이런 리스트가 있었다고 합시다.

 

딱 봐도 0부터 9까지 제곱한 값들을 리스트에 담아 놓은 것 같은데

48이란 숫자가 어색하죠?

 

7x749인데 오타가 난 것 같습니다.

이럴 때 리스트의 요소를 변경해야하죠!

이럴 때는

이렇게 바꾸고 싶은 리스트의 주소를 인덱싱한 후 바꿀 값을 할당하면

리스트가 수정됩니다!

 

혹은

이 경우를 보면 24, 37, 48 이 세개의 숫자가 연속으로 잘못됐죠?

이럴 때는 굳이 하나씩 하지 않고

슬라이싱을 이용해서 바꾸면 됩니다!

이렇게요!

5번째에 있는 것부터 7번째에 있는 것까지 바뀌네요 (8은 포함 안되죠?)

삭제는 어떻게 할까요?

삭제하고 싶은 주소를 슬라이싱 한 후 []와 같은 빈 벡터를 할당해주면 되는데요

예를 들어 첫번째 요소인 0을 지우고 싶다면

이렇게 [0:1]처럼 슬라이싱해서 (어차피 1은 들어가지 않으므로)

해주면 됩니다!

그런데 왜 그냥 [0]이라고 안하고 [0:1]이라고 하는 걸까요?

그냥 square[0]을 해주게 되면

이런 결과가 나타나기 때문입니다.

0자리에 []를 추가하는 의미가 되네요!

주의하세요!!

 

아니면

파이썬이 자체적으로 가지고 있는 del함수를 이용해서 지울 수도 있습니다!

이렇게요!!

 

리스트 요소 찾기 (in)

어떤 요소가 리스트에 있는지 없는 지를 알고 싶을 때 in 연산자를 많이 사용합니다!

이는 문자열에서도 마찬가지인데요!

예를 들어볼게요!

 

이 경우 배트맨은 영웅입니다.”라는 문장이 출력됩니다.

배트맨이 리스트 안에 있기 때문이죠!

문자열과 리스트 같이 순서가 있는 시퀀스 자료형인 경우 이 in 연산자를 사용한답니다!!

 

오늘은 이렇게 해서 리스트라는 자료형에 대해 아주 조금 알아보았는데요!

다음 포스팅에서는 리스트 관련 여러 함수와 리스트 함축 등을 다루면서

리스트 자료형에 대해 한층 더 깊게 공부해보도록 합시다!!