[파이썬] list(리스트)

컴공생의 코딩 일기·2021년 7월 23일
0

파이썬

목록 보기
4/17

list(리스트)란?

list(리스트)란 여러 개의 데이터를 저장할 때 사용합니다. 즉 여러 개의 데이터를 하나로 묶어서 관리하는 방법입니다. 리스트는 객체에 속합니다. 다른 언어를 배웠던 분이라면 리스트를 배열과 비슷하다고 생각해도 무방할 거 같습니다.

list(리스트)의 특징

  1. 하나의 리스트 안에 여러 개의 데이터(값)를 저장할 수 있다.
  2. 하나의 리스트 안에는 여러 개의 자료형(type)을 저장할 수 있다.
  3. 리스트는 하나의 객체이므로 인덱싱(indexing)과 슬라이싱(slicing) 사용이 가능하다.
  4. 저장된 값을 변경할 수 있습니다. (mutable)
  5. 배열과 비슷한 개념을 갖는다.

list(리스트)의 사용 방법

리스트명 = [값,값,값...]

예제)

# 리스트 생성
me = ['홍길동', 25, '남자', 180.5] # 여러 개의 자료형(type) 사용 가능 예) (이름, 나이, 성별, 키)

#리스트 인덱싱을 사용하여 출력
print(me[0])  # 출력 값: 홍길동
print(me[1])  # 출력 값: 25
print(me[2])  # 출력 값: 남자
print(me[3])  # 출력 값: 180.5

리스트는 method(함수)를 사용할 수 있습니다. 바로 예시로 알아 보겠습니다.

  • list(리스트)에 새로운 요소 추가하기
  1. append() 사용(무조건 마지막 위치에 값이 추가됩니다.)
me = ['홍길동', 25, '남자', 180.5]

# 리스트.append() 사용
me.append('대학생')  # list = 홍길동, 25, 남자, 180.5, 대학생
me.append('2학년')  # list = 홍길동, 25, 남자, 180.5, 대학생, 2학년

print(me)  # 출력 값: ['홍길동', 25, '남자', 180.5, '대학생', '2학년']
  1. insert(위치, 추가할 데이터) 사용 (insert를 사용하면 원하는 위치에 데이터를 추가할 수 있습니다.)
me = ['홍길동', 25, '남자', 180.5]
me.insert(1,30)  # 두 번째 위치에 30으로 값을 추가(두 번째 위치에서부터 있던 값들은 한 칸씩 뒤로 이동하게 됩니다.) 

me.insert(5, '대학생')  # 여섯 번째 위치에 '대학생'을 추가 

print(me)  # 출력 값: ['홍길동', 30, 25, '남자', 180.5, '대학생']
  • list(리스트)에 기존 값 수정하기
  1. 인덱싱(indexing)을 사용해서 값 수정
me = ['홍길동', 25, '남자', 180.5]

me[1] = 30  # me 두 번째 위치에 값을 30으로 변경

me[2] = '여자'  # me 세 번째 위치에 여자로 변경

print(me)  # 출력 값: ['홍길동', 30, '여자', 180.5]
  1. 슬라이싱(slicing)을 사용해서 값을 수정
me = ['홍길동', 25, '남자', 180.5]

me[0:2] = '홍길동 나이: 25'  
me[2:4] = '여자', 160  # ['홍길동 나이: 25', '남자', '여자', 160]

print(me)  # 출력 값: ['홍길동 나이: 25', '남자', '여자', 160]

me[0:2] 코드를 살펴볼 필요가 있습니다. me[0:2] = '홍길동 나이: 25' 이렇게 슬라이싱(slicing)을 사용하여 리스트에 첫 번째 위치와 두 번째 위치를 가리키게 되고 데이터는 하나의 값으로 대입하는 상황입니다. 이렇게 사용하였을 때 결과는 두 위치에 값이 각각 같은 값으로 저장되는 게 아니라 하나의 위치로 바뀌고 하나의 위치에만 값이 들어갑니다. 즉 '홍길동',25가 하나의 위치로 바뀌어 첫 번째 위치가 '홍길동 나이: 25'가 되고 그다음에 위치에 각각 '남자',180.3으로 위치가 바뀌고 리스트의 길이는 3이 됩니다.

  • list의 기존 요소 삭제하기

    -pop을 사용해서 값 삭제하기

me = ['홍길동', 25, '남자', 180.5]

# index를 사용해 pop을 사용할 경우
a = me.pop(0)  # pop() 메서드에 index를 넣으면 그 index 위치에 값을 삭제합니다. , a는 삭제한 값을 리턴(return) 받습니다.

print(a)  #  출력 값: 홍길동

print(me)  # [25, '남자', 180.5]


# index를 사용하지 않고 pop을 사용할 경우

me = ['홍길동', 25, '남자', 180.5]

b = me.pop()  # pop에 index를 사용하지 않으면 list에 마지막 원소를 삭제합니다.

print(b)  # 180.5

print(me)  # ['홍길동', 25, '남자']

mutable과 immutable 차이점

mutable = 변할 수 있는
immutable = 변할 수 없는

list는 mutable에 속합니다. 즉 list에 값은 변경할 수 있습니다.
바로 예시를 들어보겠습니다!

예시)


dataList1 = [1, 2, 3]  

dataList2 = dataList1  # dataList1의 값을 dataList2에 복사

print(dataList1)  # 출력 값: [1, 2, 3]
print(dataList2)  # 출력 값: [1, 2, 3]
print(type(dataList1))  # 출력 값: <class 'list'>
print(type(dataList2))  # 출력 값: <class 'list'>



먼저 dataList1과 dataList1에 값을 dataList2에 대입한 리스트를 각각 출력한 결과입니다. 모두 같은 값과 같은 데이터 타입을 갖는다는 것을 알 수 있습니다.

type() : 데이터 타입을 알고 싶을 때 사용합니다.

이제 값이 변하는지 안 변하는지 결과를 알아보겠습니다!

dataList1 = [1, 2, 3]  

dataList2 = dataList1  # dataList1의 값을 dataList2에 복사


dataList2.append(4)  # dataList2에 마지막 위치에 4를 추가

print(dataList1)  # 출력 값: [1, 2, 3, 4]
print(dataList2)  # 출력 값: [1, 2, 3, 4]

출력 결과 값을 확인해 보면 dataList2에 4를 추가했는데 dataList1에도 4가 추가된걸 볼 수 있습니다. 왜?????????

그림을 보면 예를 들어 0번째 주소 값이 100번지라고 했을 때 dataList1과 dataList1을 복사한 dataList2는 같은 100번지를 공유하게 됩니다.
두 List는 같은 주소 값을 가리키고 있기 때문에 dataList2에 4를 저장한 값이 dataList1에도 4가 저장되게 되는 것입니다.

즉 리스트(list)는 값이 변할 수 있기 때문에 mutable(변할 수 있는) 성질을 가집니다.

이상으로 파이썬에 리스트(list)에 대해 알아봤습니다. 틀린 부분이나 부족한 부분 있으면 피드백 주시면 감사하겠습니다!!!

profile
더 좋은 개발자가 되기위한 과정

0개의 댓글