진짜 개발자
본문 바로가기

Language/Python

Python - 자료형(List)

728x90

리스트(LIST)

- 연속된 자료를 표현할 때 사용한다

- 반복이 가능한 형태이다(iterable)

- 0번부터 할당이 된다

- 파이썬의 리스트에는 어떠한 자료형이든 포함이 가능하며 , 리스트, 튜플, 딕셔너리, 세트도 들어갈 수 있다

a = [1, (1,2,3) , {"a":"1"}, set([1,2,3,1,2,3])] 

print(a)

- 주소공간의 연속된 공간을 잡아 표현한다 (자료형의 크기만큼 띄워서 자리가 잡힌다)

int형 = 2byte

list = [1,2,3,4]

print(id(list[0]))

print(id(list[1]))

print(id(list[2]))

print(id(list[3]))



리스트가 필요한이유?

- 연속된 자료를 효율적으로 관리하기 위해서

예시) 5명의 사람의 성적을 관리한다고 하자 이때 각 사람들의 성적을 확인하면서 점수가 90점이상인 경우에만

   "Great" 라는 문자를 출력해보자

1) 리스트가 없는 경우

- 아래와 같이 각각의 점수마다 if문을 만들어 사용해야하므로 반복적인 코드가 발생한다


2) 리스트가 있는경우

- 다음과 같이 반복문을 이용하여 훨씬 효율적인 코드를 만들어낼 수 있다.


주의할점

1) 미리 사용할 만큼의 크기의 리스트를 주소공간에서 할당 받아야 한다 그렇지 않고 추가를 하려는 경우 에러가 난다

(IndexError: list assignment index out of range)

list = []

list[0] = 1


2) list = [1,2,3,4,5]에서 0,1 인덱스의 원소를 동시에 바꾸고 싶은 경우

- 아래의 내용은 0,1인덱스의 원소를 7,8로 교체하겠다는 말이다

  list = [1,2,3,4,5] 

  list[0:2] = [7,8] 

  print(list)

  => 결과 : [7,8,3,4,5]


- 아래의 내용은 0번원소를 [7,8] 로 교체하겠다는 뜻이다

  list[0] = [7,8]

  => 결과 : [[7,8],2,3,4,5]



사용법

1. 할당

1) 빈배열 생성

- list = []


2) 원하는 만큼 배열의 공간 할당 받기

- list = [0] * 10 

  list[5] = 10

  print(list)


- list = [ i for i in range(10) ]


* list = [1*10]은 list에 1*10한 값을 담아 생성하겠다는 뜻이다


2. 배열원소 추가

- list.append("값")


3. 출력

1) 인덱싱

- 리스트이름["인덱스"]를 통해 해당 주소공간을 참조하여 값을 가져와 리턴

- '0'번 부터 시작

- '-1'은 맨 뒤에서부터 시작

- 리스트이름["인덱스"] 


2) 슬라이싱

- ':' 를 이용하여 원하는 만큼 리스트를 잘라 출력


4. 변경

- 리스트이름["인덱스"] = 값


5. 삭제

1) 기본

del list[0]


2) 슬라이싱을 이용

list = [1,2,3,4,5]

del list[0:2]

print(list)



단점

- 리스트 내에서 특정 값을 찾을때 처음부터 일일이 뒤져가며 찾아야 한다.