티스토리 뷰

개발 언어/파이썬

자료구조

jjiiiinn 2024. 7. 9. 22:52
728x90

자료 구조

리스트 더 보기

list.append(x)
리스트의 끝에 항목을 더합니다. a[len(a):] = [x] 와 동등합니다.

list.extend(iterable)
리스트의 끝에 이터러블의 모든 항목을 덧붙여서 확장합니다. a[len(a):] = iterable 와 동등합니다.

list.insert(i, x)
주어진 위치에 항목을 삽입합니다. 첫 번째 인자는 삽입되는 요소가 갖게 될 인덱스입니다. 그래서 a.insert(0, x) 는 리스트의 처음에 삽입하고, a.insert(len(a), x) 는 a.append(x) 와 동등합니다.

list.remove(x)
리스트에서 값이 x 와 같은 첫 번째 항목을 삭제합니다. 그런 항목이 없으면 ValueError를 일으킵니다.

list.pop([i])
목록에서 지정된 위치에 있는 항목을 제거하고 반환합니다. 인덱스가 지정되지 않은 경우 a.pop()은 목록의 마지막 항목을 제거하고 반환

list.clear()
리스트의 모든 항목을 삭제합니다. del a[:] 와 동등합니다.

list.index(x[, start[, end]])
리스트에 있는 항목 중 값이 x 와 같은 첫 번째 것의 0부터 시작하는 인덱스를 돌려줍니다. 그런 항목이 없으면 ValueError 를 일으킵니다.

선택적인 인자 start 와 end 는 슬라이스 표기법처럼 해석되고, 검색을 리스트의 특별한 서브 시퀀스로 제한하는 데 사용됩니다. 돌려주는 인덱스는 start 인자가 아니라 전체 시퀀스의 시작을 기준으로 합니다.

list.count(x)
리스트에서 x 가 등장하는 횟수를 돌려줍니다.

list.sort(*, key=None, reverse=False)
리스트의 항목들을 제자리에서 정렬합니다 (인자들은 정렬 커스터마이제이션에 사용될 수 있습니다. 설명은 sorted() 를 보세요).

list.reverse()
리스트의 요소들을 제자리에서 뒤집습니다.

list.copy()
리스트의 얕은 사본을 돌려줍니다. a[:] 와 동등합니다.

리스트 컴프리헨션:

간결한 리스트 생성 방법
문법: [표현식 for 항목 in 반복가능객체 if 조건]
예: squares = [x**2 for x in range(10)]

del 문:

리스트 요소 또는 슬라이스 삭제
변수 자체 삭제 가능
예: del a[0], del a[2:4], del a

튜플과 시퀀스

튜플의 기본 특성:

  • 쉼표로 구분된 값들의 집합
  • 괄호로 둘러싸여 있음 (선택적이지만 권장됨)
  • 불변(immutable) 자료형
  • 이질적인 데이터를 포함할 수 있음

튜플 생성 및 접근:

생성: t = 12345, 54321, 'hello!' 또는 t = (12345, 54321, 'hello!')
접근: 인덱싱 사용 (예: t[0])
중첩 가능: u = t, (1, 2, 3, 4, 5)

특별한 경우의 튜플:

빈 튜플: empty = ()
단일 요소 튜플: singleton = 'hello', (끝에 쉼표 필요)

튜플 vs 리스트:

  • 튜플: 불변, 이질적 요소, 언패킹이나 인덱싱으로 접근
  • 리스트: 가변, 동질적 요소, 주로 반복으로 접근

튜플 패킹과 언패킹:

  • 패킹: t = 12345, 54321, 'hello!'
  • 언패킹: x, y, z = t

튜플의 활용:

  • 여러 값을 동시에 할당할 때 유용
  • 함수에서 여러 값을 반환할 때 사용
  • 데이터의 안전한 그룹화 (변경 방지)

주의사항:

  • 튜플 자체는 불변이지만, 튜플 내의 가변 객체(예: 리스트)는 변경 가능
  • 튜플의 요소 수와 언패킹하는 변수의 수가 일치해야 함

집합

집합의 특징:

  • 중복되는 요소가 없는 순서 없는 컬렉션
  • 주요 용도: 멤버십 검사와 중복 제거

집합 생성:

  • 중괄호 사용: basket = {'apple', 'orange', 'pear'}
  • set() 함수 사용: a = set('abracadabra')
  • 빈 집합은 set()으로만 생성 가능 ({}는 빈 딕셔너리)

집합 연산:

  • 멤버십 검사: 'orange' in basket
  • 차집합: a - b
  • 합집합: a | b
  • 교집합: a & b
  • 대칭 차집합: a ^ b

집합 컴프리헨션:

  • 문법: {표현식 for 항목 in 반복가능객체 if 조건}
  • 예: a = {x for x in 'abracadabra' if x not in 'abc'}

집합의 장점:

  • 빠른 멤버십 검사
  • 중복 요소 자동 제거
  • 수학적 집합 연산 지원

사용 예:

  • 고유한 항목 목록 만들기
  • 두 컬렉션의 공통 요소 찾기
  • 한 컬렉션에는 있지만 다른 컬렉션에는 없는 요소 찾기
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
'orange' in basket                 # fast membership testing
True
'crabgrass' in basket
False

# Demonstrate set operations on unique letters from two words

a = set('abracadabra')
b = set('alacazam')
a                                  # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
a - b                              # letters in a but not in b
{'r', 'd', 'b'}
a | b                              # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b                              # letters in both a and b
{'a', 'c'}
a ^ b                              # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}

딕셔너리

딕셔너리의 기본 개념:

  • 키-값 쌍의 집합
  • 키는 유일해야 하며, 불변(immutable) 타입이어야 함
  • 순서가 없는 자료구조

딕셔너리 생성:

  • 중괄호 사용: tel = {'jack': 4098, 'sape': 4139}
  • dict() 생성자 사용: dict([('sape', 4139), ('guido', 4127)])
  • 키워드 인자 사용: dict(sape=4139, guido=4127, jack=4098)

주요 연산:

  • 값 추가/수정: tel['guido'] = 4127
  • 값 접근: tel['jack']
  • 키-값 쌍 삭제: del tel['sape']
  • 키 존재 확인: 'guido' in tel

유용한 메서드와 함수:

  • 모든 키 얻기: list(tel) 또는 tel.keys()
  • 정렬된 키 목록: sorted(tel)
  • 모든 값 얻기: tel.values()
  • 키-값 쌍 얻기: tel.items()

딕셔너리 컴프리헨션:

  • 문법: {key: value for item in iterable}
  • 예: {x: x**2 for x in (2, 4, 6)}

특징:

  • 빠른 검색 속도 (해시 테이블 기반)
  • 키로 문자열, 숫자, 튜플 사용 가능 (리스트는 불가)
  • 파이썬 3.7부터는 삽입 순서 유지

주의사항:

  • 존재하지 않는 키로 접근 시 KeyError 발생
  • 키는 유일해야 함 (중복 시 마지막 값으로 덮어씀)

출처: 파이썬 튜토리얼

728x90

'개발 언어 > 파이썬' 카테고리의 다른 글

클래스  (1) 2024.07.10
에러와 예외  (0) 2024.07.09
입력과 출력  (0) 2024.07.09
모듈  (0) 2024.07.09
기타 제어 흐름 도구  (0) 2024.07.09
댓글