상세 컨텐츠

본문 제목

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

인공지능/파이썬

by Ryuzy 2023. 9. 1. 03:00

본문

728x90
반응형

1. 컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 있게 해주는 데이터 구조를 의미합니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 있게 해줍니다. 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속합니다.

 

 

2. 리스트

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

1. PyObject_HEAD

  • PyObject_HEAD 는 C언어로 구현된 파이썬 인터프리터(CPython) 의 구조체(struct) 에 포함된 매크로 입니다.
  • 파이썬 객체라면 반드시 가져야 하는 공통 필드를 정의 합니다.
typedef struct {
    PyObject_HEAD   // 공통 필드: 참조 횟수, 타입 정보 포함!
    Py_ssize_t ob_size;  // 리스트의 길이
    PyObject **ob_item;  // 실제 아이템 배열 포인터
    Py_ssize_t allocated; // 할당된 배열 용량
} PyListObject;

 

2. 리스트 만들기

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

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)
print(type(li4))

print(li4[0])
print(type(li4[0]))
print(li4[0])
print(li4[1])
print(li4[2])
print(li4[3])
# print(li4[4]) # IndexError: list index out of range

print(type(li4[0]))
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))

 

3. 인덱싱

리스트의 항목은 위치(인덱스) 가지고 있으며, 인덱스를 사용하여 접근할 있습니다. 인덱스는 0부터 시작합니다.

  • 인덱싱은 리스트에서 '하나의 요소'를 꺼내는 것입니다.
  • 결과는 → 꺼낸 하나의 값(값 자체)입니다.
  • 대괄호로 감싸지지 않습니다.
li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[0])
print(li1[-1])
print(li1[0] + li1[-1])

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

li3 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟','🌭','🥩','🍗']]]
print(li3)
print(li3[2])
print(li3[-1])
print(li3[-1][-2])
print(li3[-1][-1][-2])
print(li3[-1][-1][-1])

 

4. 슬라이싱

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

  • 슬라이싱은 리스트에서 '여러 개 요소'를 잘라서 새로운 리스트로 만드는 것입니다.
  • 결과는 → 잘라낸 "리스트" (대괄호로 감싸진 새로운 리스트)입니다.
리스트[start:end:step]
  • start: 어디서 시작할지 (포함)
  • end: 어디까지 갈지 (끝 인덱스는 포함하지 않음)
  • step: 몇 칸씩 이동할지
li1 = [10, 20, 30, 40, 50]
print(li1)
print(li1[0:3])

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

li3 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟','🌭','🥩','🍗']]]
print(li3[2:3])
print(li3[3][:2])

 

4. 리스트의 항목 추가 / 삭제

리스트의 항목들은 변경할 있습니다. , 리스트의 항목들을 수정, 추가, 삭제할 있습니다.

li4 = [10, 20, 30, 40, 50]
# 슬라이싱을 이용하여 요소를 추가한 경우 리스트에 데이터만 포함
li4[1:2] = ['😁','😂','😎','😍']
print(li4)

li4 = [10, 20, 30, 40, 50]
# 인덱싱을 이용하여 요소를 추가한 경우 리스트 안에 리스트를 만들고 포함
li4[1] = ['😁','😂','😎','😍']
print(li4)

li4 = [10, 20, 30, 40, 50]
print(li4[1:3])
li4[1:3] = [] # 빈 리스트를 슬라이싱을 통해 저장하면 해당 요소가 삭제됨
print(li4)

li4 = [10, 20, 30, 40, 50]
print(li4[1:2])
print(li4[1])
li4[1] = []
print(li4)

li4 = [10, 20, 30, 40, 50]
print(li4)
del li4[1]
print(li4)

 

5. 리스트의 결합

리스트 간의 + 연산으로 리스트를 결합할 있고, * 연산으로 리스트를 반복할 있습니다.

li5 = [10, 20, 30]
li6 = [40, 50, 60]
print(li5 + li6)
print(li6 + li5)

li5 = [10, 20, 30]
li6 = li5 + [40, 50, 60] # [10, 20, 30] + [40, 50, 60]
print(li6)

li6 = [10, 20, 30]
li6 += [40, 50, 60] # li6 = li6 + [40, 50, 60]
print(li6)

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

 

6. 함수와 메서드

리스트를 다루기 위한 여러 함수와 메소드들이 있습니다.

# len(): 객체의 길이를 반환하는 파이썬의 기본 내장 함수
li6 = [10, 20, 30]
print(len(li6))

 

# append(): 리스트 요소의 끝에 새로운 요소를 추가
li6 = [10, 20, 30]
print(li6)

li6.append(100)
print(li6)
# li6.append(200, 300)
li6.append([200, 300])
print(li6)

 

# extend(): 리스트 요소의 끝에 새로운 여러 요소를 추가
li6 = [10, 20, 30]
print(li6)

# li6.extend(100)
li6.extend([100])
print(li6)
li6.extend([200, 300, 400])
print(li6)

 

# pop(): 리스트 마지막 요소를 삭제하고 삭제된 요소를 반환
li6 = [10, 20, 30]
print(li6)

# print(li6.pop())
temp = li6.pop()
print(li6)
print(temp)

 

# index(): 리스트에서 특정 요소의 값 인덱스를 반환
li6 = [10, 20, 30]
print(li6)

print(li6.index(30))
# print(li6.index(100)) # 값이 없으면 에러

 

# reverse(): 리스트의 요소들의 순서를 반대로 설정
li7 = [100, 50, 70, 60, 20]
print(li7)

li7.reverse()
print(li7)

 

# 슬라이싱을 사용하여 리스트의 요소들의 순서를 반대로 설정하는 방법
li7 = [100, 50, 70, 60, 20]
print(li7[:]) # [0:5]
print(li7[0:5])
print(li7[::])    # step이 생략
print(li7[0:5:1]) # step의 기본값은 1
print(li7[0:5:2]) # step을 2로 설정

li7 = [100, 50, 70, 60, 20]
print(li7[::-1])
# step이 -1일 경우 start의 기본값은 length-1, end의 기본값은 -1으로 설정
print(li7[-1::-1])
print(li7[4::-1])
print(li7[4:None:-1])

step이 음수인 경우, end의 기본값은 -1입니다. 하지만 리스트의 마지막 요소 역시 인덱스 -1이므로, 전체를 역순으로 출력할 때는 end를 생략하여 사용합니다.

 

# sort(): 리스트의 요소를 오름차순으로 정렬
li7 = [100, 50, 70, 60, 20]
print(li7)

li7.sort()
print(li7)
# sort(reverse=True): 리스트의 요소를 내림차순으로 정렬
li7.sort(reverse=True)
print(li7)

li8 = ['Apple', 'apple', 'orange', 'banana', 'melon']
li8.sort()
print(li8)

li9 = ['김사과', '오렌지', '반하나', '이메론', '배애리']
li9.sort()
print(li9)

 

# sorted(): 모든 요소를 정렬한 후 반환해주는 함수
li7 = [100, 50, 70, 60, 20]
print(li7)

result = sorted(li7)
print(li7)
print(result)

 

# count(): 리스트에서 특정 요소의 갯수를 반환
li9 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li9)

print(li9.count(20))
print(li9.count(100))

 

728x90
반응형

'인공지능 > 파이썬' 카테고리의 다른 글

파이썬 컬렉션 타입 - 딕셔너리  (1) 2023.09.03
파이썬 컬렉션 타입 - 튜플  (0) 2023.09.03
문자열 다루기  (0) 2023.08.25
파이썬의 변수  (2) 2023.08.25
print 함수  (0) 2023.08.24

관련글 더보기