일상코딩/노트

Python : 데이터타입 (시퀀스 : list, tuple, range)

코딩애벌레 2024. 1. 17. 17:48

이전 글에서 Sequence Types 중 특징과 Text Sequence Type만 자세하게 알아봤는데, 이번에는 list, tuple, range에 대해 알아보려 한다.

 

List(리스트)

: 여러 개의 값을 순서대로 저장하는 변경 가능한 시퀸스 자료형.

색깔이 들어간 '순서'와 '변경 가능'에 대한 특성을 알고 있어야하는 이유는 이에 따라 사용 가능한 도구가 다르기 때문이다. 또한 저번 시간에는 '정렬'에 대한 설명도 했는데 정렬은 필터처럼 규칙을 가진다고 보면 된다. list는 정렬에 해당되진 않는다. 그 이유는 list에 데이터가 들어오는 '순서'에 맞추어 저장되기 때문이다. 

list 내부에 들어간 숫자의 크기 혹은 문자열일 경우 문자열의 길이나 첫 글자와는 상관없이 순서 나열된다.

 

리스트의 생성과 접근방향 

 

: 대괄호 [ ] 혹은 list( )을 통해 생성이 가능

  • 내부에 어떠한 자료형(숫자, 문자, 리스트, dict등) 데이터를 저장할 수 있음
  • 생성된 이후 내용 변경이 가능하다 -> 인덱스를 통한 가변 자료 등
  • 유연성이 높아 가장 많이 쓰이는 타입

: 순서를 가지고있기 때문에 인덱스를 통해 원하는 데이터에 접근이 가능 

리스트의 데이터에 접근할 때는 인덱싱 list[ i ]을 사용한다

 

: 인덱스를 통한 데이터에 접근이 가능하며 가변자료형(mutable) 이기 때문에 리스트에 들어있는 특정 요소만을 꺼내 바꿀수도 있다. 사실 벌써 헷갈리는 단어가 여럿 있는데 반복객체(iterable), 가변자료형(mutable) 시퀸스(sequence) 등이 있다. 이는 컨테이너를 다룰때 한번에 그림으로 나타낼 예정이다.


Tuple(튜플)

: 여러개의 값을 순서가 있는 구조로 저장하고 싶을 때 사용한다. 다만 list와 차이점은 대괄호 [ ] 가 아닌 소괄호 (( )) 을 사용한다는 것과 튜플 생성 이후 불변자료형(immutable)인 점이다. 소괄호를 사용할 때 함수의 인자와 구분하기위해 기호가 두번 사용되는 것도 알아두어야 한다. 사실 배우기는 했지만 아직 어떤 경우에 장점으로 쓰이는지는 와닿지 않는다.

특이한 설정이 많은 친구다.. 괄호 두개인 것과 요소가 한개일 경우 등

 

자료에 접근하는 방식은 동일하게 인덱싱을 사용하여 접근할 수 있다. 자꾸 반복해서 말하고 있지만 리스트는 데이터를 바꿔넣을 수 있고, 튜플은 불가능하다. 그렇다면 pop와 append 메서드는 가능할까?? 결과는 아래의 사진에서 볼 수있다. 

리스트는메서드, 데이터 바꾸기 모두 가능하지만 튜플은 아에 건들지를 못한다.

 

그리고 내가 초반에 많이 하던 실수였는데, 인덱싱은 알면서 리스트와 튜플을 잘 구분 못할때 생각없이 만들면 튜플로 만들어진다. 이런 경우를 방지하기위해 튜플을 생성할 때, 마지막 요소의뒤에까지 ,를 찍어주는 센스가 필요하다

이러니 값을 바꾸려고 해도안바뀌지.. (머쓱)


Range(범위생성)

: 숫자의 시퀀스를 만들기 위해 사용, 주로 반복문을 쓸때 많이 볼 수 있다. 다만 range는 immutable 하기 때문에 list와 또 다른 점을 갖게 된다. 그래서 list로 사용하기 위해서는 형변환을 해주면 된다. 이는 tuple도 동일하다.

형변환은 곧 다룰 예정이니 이런게 가능하다 라고만 이해해두자

 

주의해야할 점이 몇가지 있다. range(5)를 쓴다면 0부터 4까지이다. 어디서 많이 본 느낌인데, 인덱싱과 유사하다고 보면 편하다. 실제로 for문에 테스트 케이스를 넣기위한 문법으로 사용할 때, 범위지정으로 for in range(1, T + 1): 을 제일 많이 사용해본것 같다. 이렇게 해야 1부터 T까지의 테스트 케이스를 의미하기 때문이다. 인덱싱과 유사하다고 했는데 그럼 for in range(2, T + 1, 2) 역시 가능하다. 마지막 요소는 인덱스와 마찬가지로 띄어넘기라고 생각하면 된다.

이런걸 보면 list는 정말 만능이구나..

 

앞서 문자열에서의 인덱싱과 슬라이싱을 봤을텐데 당연히 list, tuple, range 모두 가능하다. 위에서 배운걸 총 집합한다면

인덱싱에서의 음수는 꼭알아두면 좋은 방법인 것 같다. 문제중에 큰 수부터 작은 수 순서대로 넣는 경우도 종종 있기 때문

728x90