본문 바로가기

리스트(list) 본문

BF 2024/자료구조

리스트(list)

jaegomhoji 2022. 2. 4. 18:40

**************************************************************************************************************

INDEX

** 리스트란?

** 리스트 아이템 조회

** 리스트 길이

** 리스트와 for 문 

** 리스트와 while 문

** 리스트에 아이템 추가 

** 리스트의 특정 위치에 아이템 추가

** 리스트의 아이템 삭제

** 리스트의 특정 아이템 삭제

** 리스트 연결 

** 리스트 아이템 정렬

** 리스트 아이템 순서 뒤집기 

** 리스트 슬라이싱

** 나머지 기능들 

 

*************************************************************************************************************

** 리스트란? 

> 배열(array같이 쭉 나열된)과 같이 여러 개의 데이터를 나열한 자료구조 

> '[]'로 선언하고, 구분은 ','를 이용한다. 

> 숫자, 문자, 논리형 등 모든 데이터를 같이 저장하거나, 리스트 안에 또 다른 컨테이너 자료형을 저장할 수 있다 

> class_samples( ~들이니 관례적으로 's'붙인다 ) = [ 1, 2, 5.19, True, 'text', ['container1', 'container2' ]]

** 리스트 아이템 조회

> 인덱스란? : 아이템에 자동으로 부여되는 번호표, 0부터 부여된다  

list       = ['item1' , 'item2' , 'item3' ]

index   = [0,1,2]

> 각각의 아이템(데이터)에 접근하기 위해서 인덱스를 통해 조회할 수 있다 

> 잘못된 인덱스 사용 시 오류가 발생한다.  -> IndexError : list index out of range 

 

** 리스트 길이

 

> 리스트에 저장된 아이템 개수를 뜻한다

list = [0,1,2,3,4] -> 아이템이 5개 있다 -> 길이는 5!

> 내장함수 len(list)를 통해 길이를 구할 수 있다 

> len()같은 함수는 레퍼런스 함수라고 하는데, 메모리에서 변수명이 저장된 공간에서 데이터가 있는 공간을 찾음. inode나 bitmap역할?

> len() 함수는 리스트의 개수 뿐만이 아니라 문자열 str의 길이도 알 수 있다

** 리스트와 for 문

> len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다. 

> method 1 ( 인덱스를 이용한 형태 ) 

> method 2 ( iterable 객체를 활용한 형태 ) 

> For문을 이용하여 내부 리스트를 조회할 수 있다. ( 내부 리스트의 len개수만큼 변수를 설정한다)

> for과 if문을 사용 등 조건문과 함께 사용 가능

 

** 리스트와 while 문

> while문을 이용해서도 다양한 방법으로 아이템 조회가 가능하다 , 다만 for과는 작동 방식이 조금 다름 

> 숫자 조건, flag == T -> F, break 등 while 반복문을 다양하게 빠져나오면 된다 

 

** 리스트에 아이템 추가 

> append() 라는 함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다. 

list = [1,2,3,4]  -> list.append(5) -> list=[1,2,3,4,5] 

 

** enumerate() 함수 

> enumerate() 함수를 이용하면 아이템을 열거할 수 있다. 숫자화해라! 라는 뜻 아닌가? 

> list에도 적용 가능하고, str에도 적용 가능하다

> 변수명 = enumerate(list) 시에는 enumerate object를 호출하지만, 내용들을 출력하지는 못한다.

 

> 아이템 조회에 사용해보기 

신입생 볼드모트가 모자에게 기숙사 배정을 받고 있다. 원하는 기숙사는 모자의 머리속에 몇번째로 저장되어 있을까?

 

> 카운트에 활용해보기 .. 공백이나 특정 문자나 문자열을 찾아봐야할 때 활용할 수 있다. 

 

** 리스트의 특정 위치에 아이템 추가

> insert() 함수를 이용하면 특정 위치(인덱스)에 아이템을 끼워넣을 수 있다. 기존의 아이템은 뒤로 밀려난다. 

list = [1, 2, 3, 4] -> insert(2, 2.5) -> [1, 2, 2.5, 3, 4]  ( 0,1,2 -> 2에 해당하는 세번째 위치에 삽입해라 ) 

 

# 연습하기 

 

** 리스트의 아이템 삭제

 

> pop()는 인덱스를 통해서 반환!

> pop() : 함수를 사용하면, 마지막 인덱스에 해당하는 아이템을 팝!하고 빼낼 수 있다. ㅋㅋ

> pop() : 함수에 인수를 주면, 해당 인덱스에 해당하는 아이템을 팝!하고 빼낼 수 있다.  당연히 insert()와 마찬가지로 순서가 다시 바뀐다.

> result = list.pop() 을 통해 팝!하고 빠져나온 결과를 변수에 저장해서 사용할 수 있다. 

 

** 리스트의 특정 아이템 삭제

> remove() 함수는 인자와 일치하는 특정 아이템을 1회 삭제!

> 삭제되는 순서는 순서대로이다. ex)list= [1,2,1] -> list.remove(1) -> [2,1]

> 2개 이상이라면, while문으로 조건을 주자 

 

 

 

** 리스트 연결

> extend()함수를 이용하면 리스트에 또 다른 리스트를 연결할 수 있다. 

> 기존리스트.extend(추가할 리스트) 

> + , 덧셈연산자로도 리스트를 확장할 수 있다

 

> 이후 for 문과 if 문으로 중복된 아이템들을 제외시킬 수 있다. 새롭게 추가할 리스트에 없는 숫자들만 추가하면 중복이 제거됨.

 

** 리스트 아이템 정렬

> 정렬대상.sort() 함수를 이용하면 아이템을 정렬할 수 있다. 기본적으로는 오름차순.

> 내림차순으로 정렬을 원할 경우, 정렬 대상.sort(reverse=True)를 설정해주면 된다. 

> sort는 변수로 지정되는것이 아니고, 해당 리스트 자체를 정렬한다. 아래 이미지로 확인. 

> 변수명.sort()  이후 print(변수명) 형태로 출력한다.

> int와 str형이 혼재된 리스트에서는 정렬을 시행할 수 없다고 뜬다. 

> str 형 중에서 국어와 영어가 혼재된 경우 정렬을 시행하면 영 > 국 순으로 배열된다. 

 

** 리스트 아이템 순서 뒤집기 

reverse()함수를 이용하면 아이템 순서를 뒤집을 수 있다. ( 정렬의 개념이 아닌 말 그대로 앞 뒤 순서 뒤집기 )

당연히 0 1 3  6 8 7 이 정렬이 되지 않은채로, 순서만 뒤집혀 7, 8, 6, 3, 1, 0 으로 출력되었다.

 

** 리스트 슬라이싱

> 인덱스를 활용해 리스트[n:m]을 통해 원하는 아이템만 뽑아낼 수 있다.

> - n : -m 등 인덱스에 마이너스로도 슬라이싱이 가능한데, 단순하게 뒤에서 부터 (-) n번째인 수부터 인덱싱 한다는 것이다.

* 위의 예시는 0, 1, 2 즉 3번째 인덱스부터 -1번째인 인덱스인 4까지 숫자를 출력해라. 

* 아래 예시는 -6, 뒤에서 부터 6번째에 있는 인덱스부터 -1번째 위치에 있는 인덱스까지 출력해라.  

* 정방향에서는 0부터 세지만, 뒤에서는 -1부터 센다 

 

> 슬라이싱 단위도 설정 가능하다

슬라이스대상[처음시작:끝:단위(범위안의 n번째 아이템마다 슬라이스)]

 

> 처음과 끝은 생략 가능하다. [:5:2] -> 처음을 생략(처음부터) /  [::2] -> 처음과 끝을 생략  /. [2::2] -> 끝을 생략

> 끝을 생략할 시 주의, 콜론을 하나만 찍을 경우 인덱싱 구간 설정과 똑같기 때문에 콜론을 두개 찍어야 한다.  

아모이아이 잇힝! 이아 이아!

 

> n:m으로 str을 이용하면 문자열 슬라이싱도 가능하다. 

 

> 인덱싱을 통해 아이템 변경도 가능하다

 

> slice(), 슬라이싱 함수를 이용할 수도 있다. 

 

** 나머지 기능들 

> 리스트를 곱셈 연산하면, 아이템이 그만큼 반복된다. 

 

> 리스트.index(아이템) 을 사용하면, 리스트 안에 아이템이 몇 번째 인덱스인지 알 수 있다.

* 가장 앞의 인덱스만 반환되는 모습 

* 범위 내 첫번째 인덱스를 찾는 방법은 간단하게 범위를 설정해주기만 하면 가능하다.

 

** count() 함수로 특정 아이템의 개수를 알아낼 수 있다  

 

** del list[index] 함수로 특정 인덱스 값의 아이템을 삭제할 수 있다. 슬라이싱으로 지울 수도 있다.

 

 

** isinstance(data,list) : 자료가 리스트형인지 확인하는 한 가지 또 다른  방법 

 

'BF 2024 > 자료구조' 카테고리의 다른 글

생성자  (0) 2022.02.05
클래스 상속  (0) 2022.02.05
자료구조란?  (0) 2022.02.04
연산자  (0) 2022.01.26
형식문자  (0) 2022.01.26
Comments