[Python] 파이썬 컬렉션 타입 - 리스트

개린이·2023년 9월 5일
1

Python

목록 보기
7/20
post-thumbnail

컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조

여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해주며 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속한다.

리스트

여러 값들을 하나의 변수에 저장하고 관리할 수 있게 해주는 순차적인 자료구조

생성

리스트는 대괄호[ ] 를 사용하여 생성하며, 내부에 포함된 각 항목들은 쉼표로 구분된다.

🖥️예제

li1 = [1, 3, 5, 7, 9]
print(li1)
print(type(li1))

li2 = list([1,3,5,7,9]) # 자료구조를 변경할때 사용한다.
print(li2)
print(type(li2))

li3 = ['김사과','반하나','오렌지','이메론']
print(li3)

li4 = [1,50.5, '김사과',True]
print(li4)

li5 = [1,2,'파이썬',['김사과','오렌지']]
print(li5)

인덱싱

리스트의 각 항목은 위치(인덱스)를 가지고 있으며, 인덱스를 사용하여 접근할 수 있다

인덱스는 0부터 시작

🖥️예제

li1 = [1,3,4,7,9]
print(li1)
print(li1[0])
print(li1[1])
print(li1[2])
print(li1[-1])
print(li1[0] + li1[-1])

li2 = ['김사과','오렌지','바나나', ['🍎','🍕','🍔','🍟']]
print(li2)
print(li2[-1])
print(li2[-1][2])
print(li2[-1][2])

li3 = [1,2,3,['김사과','오렌지','바나나',['🍎', '🍕', '🍔', '🍟']]]
print(li3[2])
print(li3[-2])
print(li3[-1])
print(li3[-1][-2])
print(li3[-1][-1][-1])

슬라이싱

리스트의 일부분만을 추출할 수 있다.

🖥️예제

li1 = [10,20,30,40,50]
print(li1)
print(li1[0:3])

li2 = li1
print(li2)
li2[0] = 100;
print(li1)
print(li2)

li3 = [10, 20, 30, ['김사과', '오렌지', '반하나'], 40, ['🍕', '🍔']]
print(li3[2:6])
print(li3[5][:1])

변경가능

리스트의 항목들은 수정, 추가, 삭제 등 변경이 가능합니다.

🖥️예제

li2 = [100,20,30,40,50]

# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함
li2[1:2] = ['😎', '😍', '😂']
print(li2)

li2 = [100,20,30,40,50]

# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li2[1] = ['😎', '😍', '😂']
print(li2)

li2 = [100,20,30,40,50]
print(li2[1:3])

# 빈 리스트를 저장하면 요소가 삭제됨
li2[1:3] = []
print(li2)

li2 = [100,20,30,40,50]
print(li2)

# 인덱스 0번 요소 삭제
del li2[2]
print(li2)

연산

  • 연산으로 리스트를 결합할 수 있으며 * 연산으로 리스트를 반복할 수 있다.

🖥️예제

li1 = [10,20,30]
li2 = [40,50,60]

print(li1 + li2)
print(li2 + li1)

li1 = li1 + [40, 50] # li1 += [40,50]
print(li1)

li1 = [10,20,30]

# inplace 연산
li1 += [40,50]
print(li1)

li1 = [10,20,30]
print(li1 * 3)

li2 = [10,20,30]
print(li2[0] + li2[2])
li2[1] = '🍟'

# print(li2[0] + li2[1]) str과 int 타입을 더하려고 했기 때문에 type 에러가 발생한다.

함수와 메서드

리스트를 다루기 위한 여러 함수와 메서드

  1. len(): 객체의 길이(항목의 개수)를 반환하는 내장 함수

🖥️예제

li1 = [10,20,30]
print(len(li1))

  1. append(): 리스트에 사용되며, 리스트의 끝에 새로운 항목을 하나만 추가하는 메서드

🖥️예제

li1 = [10,20,30]
print(li1)

li1.append(100)
print(li1)
li1.append([200,300])
print(li1)

  1. extend(): 리스트에 iterable(반복 가능한 객체)의 모든 항목을 추가하는 메서드

🖥️예제

li1 = [10,20,30]

li1.extend([50])
print(li1)
li1.extend([1000,2000])
print(li1)

  1. pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환하는 메서드

🖥️예제

li1 = [10, 20, 30, 40, 50]

print(li1)
print(li1.pop()) #삭제 후 반환하며 in-place 연산까지 동시 진행
print(li1)

li1 = [10, 20, 30, 40, 50]
print(li1)
temp = li1.pop()

print(temp)
print(li1)

  1. insert(): 리스트의 특정 인덱스에 항목을 추가하는 메서드

🖥️예제

li1 = [10,20,30]

li1.insert(1,100)
print(li1)
li1.insert(1,[100,200]) # 리스트로 넣는것도 가능
print(li1)

  1. index(): 리스트에서 특정 값의 인덱스를 반환하는 메서드. 특정 값의 인덱스가 없다면 에러발생

🖥️예제

li1 = [10, 100, 20, 30]

print(li1.index(100))
# print(li1.index(50)) ValueError

  1. reverse() : 리스트의 항목들의 순서를 뒤집는 메소드

🖥️예제

li1 = [100, 50, 70, 60, 20]

li1.reverse()
print(li1)

li1 = ['김사과', '오렌지'<, '반하나', '이메론']
li1. reverse()
print(li1)

※ 슬라이싱을 사용하여 리스트의 순서를 뒤집는 방법

슬라이싱(slicing)은 파이썬에서 시퀀스 타입의 객체(예: 리스트, 문자열, 튜플 등)의 일부를 추출하는 방법. 슬라이싱의 기본 구조는 [start:stop:step]이다.

  • start: 슬라이스의 시작 인덱스. 이 인덱스의 요소는 슬라이스에 포함되며. start를 생략하면, step이 양수이면 0, step이 음수이면 -1로 간주된다.

  • stop: 슬라이스의 끝 인덱스. 이 인덱스의 요소는 슬라이스에 포함되지 않으며. stop을 생략하면, step이 양수이면 시퀀스의 끝, step이 음수이면 시퀀스의 시작으로 간주된다.

  • step: 슬라이스의 스텝(증감) 값입니다. step을 생략하면 1로 간주된다.

🖥️예제

li1 = ['Apple', 'apple', 'orange', 'banana', 'melon']
print(li1[::-1]) # start와 stop을 생략하고 step을 -1로 설정한 슬라이싱
# start를 생략하면 -1로 간주. 즉, 시퀀스의 마지막 요소부터 시작
# stop을 생략하면 0으로 간주. 즉, 시퀀스의 시작까지 진행
# step이 -1이므로, 시퀀스의 요소를 뒤에서부터 앞으로 하나씩 건너뛰어서 슬라이싱

  1. sort(): 리스트의 항목들을 정렬하는 메서드. in-place 연산을 수행 sort(reverse=True) 내림차순

🖥️예제

li1 = [10, 40, 30, 90, 50]

li1.sort() #오름차순
print(li1)

# sort(reverse=True) 내림차순
li1.sort(reverse = True)
print(li1)

  1. sorted() : iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수

🖥️예제

li1 = [10, 40, 30, 100, 90, 50]
print(sorted(li1))
print(li1)
print(sorted(li1,reverse = True)) #내림차순
print(li1)

li1 = sorted(li1)
print(li1)

  1. count(): 리스트에서 특정 값으 개수를 반환하는 메서드

🖥️예제

print(li1.count(20))
print(li1.count(16))




리스트 객체의 구성

  • ①번 : 변수 l이 PyListObject 리스트 객체를 가리키고 있습니다.

  • ②번 : 이 리스트에는 4개의 요소가 들어 있으므로 리스트의 개수를 나타내는 ob_size가 4입니다.

  • ③번 : ob_item이 각 리스트의 개별 요소들을 가리키는 '이름 없는 변수 집합'을 가리키고 있습니다. 이름 없는 변수들 역시 변수 l과 마찬가지로 각각 다른 객체들을 가리키고 있습니다.

  • ④번 : allocated는 실제 할당된 메모리 버킷의 개수를 나타냅니다.

    • 리스트에 요소가 추가 될 때 마다 메모리 할당을 하게 되면 성능저하가 발생할 수 있으므로 미리 필요한것 보다 많은 버킷들을 할당해 놓습니다. 위 이미지에서는 하나만 더 할당 되어 있지만 실제 코드를 보면 리스트의 사이즈에 따라 4 또는 8씩 증가합니다. 하지만 상세 구현은 파이썬 버전에 따라 다를 수 있으므로 실제 필요한 버킷의 개수보다 여유롭게 alllocated 사이즈를 유지합니다.
  • ⑤번 : 리스트에 또다른 리스트가 포함 될 수 있습니다. 이렇게 되면 다시 똑같은 메모리 구조가 재귀적으로 생성 됩니다.

0개의 댓글

관련 채용 정보