230811 TIL

요시롱·2023년 8월 11일

TIL

목록 보기
3/8
post-thumbnail

Python 복습

리스트, 튜플, 집합, 딕셔너리
새롭게 알게된 것, 자주 헷갈리는 것 위주로 정리


리스트의 메소드

  • 문자열 관련 메소드에 의한 값 변경은 변수에 바로 반영되지 않지만, 리스트 관련 메소드에 의한 변경은 변수에 바로 반영된다. -> 필요할 경우 원본 데이터는 복사해두어야함.

  • list1.append(x) : 가장 뒤에 요소(x) 1개 추가

  • list1.insert(i, x) : 원하는 위치(i)에 요소(x) 추가

  • list1.extend(list2) : list1 뒤에 list2 연결

리스트의 깊은 복사와 얕은 복사

  • nums = [1, 2, 3, 4]를 복사할 때,
    • nums1 = nums
    • nums2 = nums[:] 는 다른 방법이다.

nums1은 nums와 메모리에 저장된 위치가 동일하기에(id(nums)와 id(nums1)가 동일) nums1을 변경할 경우 nums가 변경되고(얕은 복사), nums2는 변경되지 않는다.(깊은 복사)

  • nums.copy() : 깊은 복사

index(x)

  • 리스트의 첫번째 x의 위치를 반환
  • index(x, -1) : 리스트의 가장 마지막 x의 위치를 조회
  • index(x, n) : 리스트의 n번째 이후 처음 등장하는 x의 위치를 반환

sorted()와 sort()

  • sorted() : 파이썬의 내장함수. 반환된 값을 다시 새로운 변수에 재할당 해주어야 한다. (원본값 변경 X)
  • list.sort() : 리스트의 메소드. 반환값이 없다. 바로 원본값을 변경한다.

remove()와 pop()

  • remove(x) : 가장 먼저 등장하는 x를 삭제. 반환값 없음(None).
  • pop(x) : 특정 위치를 삭제하고 삭제한 값을 반환

divmod(a, b)

  • a, b 2개의 숫자를 인자로 받아 a를 b로 나눈 몫과 나머지를 튜플로 반환.

집합

  • 중복을 허용하지 않는다.
  • 원소의 순서가 의미가 없으므로, 인덱싱으로 값을 얻을 수 없다.
    • 인덱스가 없다.
  • 집합은 immutable한 자료형만 원소로 가질 수 있다.
    • int, str, bool, tuple 등
      • tuple에 mutable한 자료형이 들어있는 경우에는 집합의 원소가 될 수 없다.
    • list나 dict은 집합의 원소가 될 수 없다.

집합 관련 메소드

  • add() : 집합에 요소 1개를 추가
  • update() : 집합에 여러 요소를 추가한다.
test_set1 = {1, 2, 3}
test_set1.update([4, 5])
print(test_set1)  # {1, 2, 3, 4, 5}

test_set2 = {'맑음', '흐림', '비'}
test_set2.update({'눈' : 'snow'})
print(test_set2)  # {'맑음', '흐림', '비', '눈'}
				  # immutable인 key만 들어간다.  
  • pop() : 무작위로 요소 1개 삭제
  • remove(x) : 요소 x를 삭제. x가 없을 경우 에러 발생.
  • discard(x) : 요소 x를 삭제. x가 없어도 에러가 발생하지 않음.

dict의 key

  • value로 key를 찾을 수는 없다.
  • immutable한 자료형만 dict의 key가 될 수 있다.
    • 리스트는 key가 될 수 없다.
# 리스트를 key로 사용할 경우
menu = {['이름', '가격']: ['마라탕', 8000]}

# TypeError: unhashable type: 'list'

  • 메소드나 내장함수의 반환값 유무, 원본값 변경 여부가 은근 자주 헷갈리는 것 같다.

  • 집합 주피터노트북 파일이 어떻게 열어도 안 열려서... 오늘 내용은 내일 TIL에 보충해야할듯... 추가 완료

    • 무한루프코드를 주석처리 하지 않고 저장해서 out of memory가 나온 것이었다ㅠㅠ
    • 일단 열려야 수정을 할 수 있는데, 애초에 전체를 실행하고 여는게 디폴트인듯
jupyter nbconvert 원본파일명.ipynb --to notebook --ClearOutputPreprocessor.enabled=True --output 새파일이름

0개의 댓글