본문 바로가기

Computer Science/파이썬

[Python] Basic Collection - list[], tuple(), dict{}

기본자료형 vs 컬렉션 자료형

기본 자료형(문자열, 숫자, bool)등은 특정 하나의 값만 사용.

컬렉션은 여러개의 값을 저장 할 수 있다. 컬렉션 자료형의 특징에 따라 리스트, 튜플, 셋, 딕셔너리로 구분.

 

List [ ]

  1. 컬렉션 자료형에서 가장 많이 쓰이는 자료형태로; 딘순자료형이 아닌 자료구조의 형태를 취함
  2. 리스트는 가변 가능함 (=동적이다) ; 인덱스와 메소드를 활용, 값의 수정 및 정렬이 쉽다.
    cheeses = ['Cheddar', 'Edam', 'Gouda'] 
    numbers = [123, 456]
    empty = []
    
    print(cheeses, numbers, empty)   # ['Cheddar', 'Edam', 'Gouda'] [123, 456] []
    
    print('numbers[1] :',numbers[1]) # numbers[1] : 456
    print('numbers[0] :',numbers[0]) # numbers[0] : 123
    print('numbers :',numbers)       # numbers : [123, 456]
    print(cheeses[0])                # Cheddar
    
    numbers[1]                       # 456
    numbers[1] = 789             ## numbers 첫번째 자리 789로 수정
    print(numbers)                   #[123, 789]​
  3. 프로그래밍에서 기본적으로 사용되는 배열의 기능(값을 여러개 저장할 수 있는 기능)
  4. 탐색, 삽입, 삭제와 같은 연산에 대한 메소드 갖고 있음 -- 튜플 ()과의 차이
  5. 인덱스를 기반으로 값을 저장하고 수정 -- 딕셔너리 {}와의 차이
  6. 하나의 리스트에 문자열, 숫자 타입 뿐만 아니라 리스트[]를 넣을수 있다.(다차원 리스트가 됨; 게임개발, 대규모 머신러닝 알고리즘에서 사용.)
  7. 리스트[ ] 메소드 활용
    ### append() --> 리스트의 마지막에 새로운 값 append
    arr = ['math', 'biology', 1989, 2019]
    arr.append(2021)
    arr						# ['math', 'biology', 1989, 2019, 2021]
    
    ### insert() --> 리스트의 중간에 인덱스와 값을 지정하여 값을 insert 삽입
    arr_in = ['math', 'biology', 1989, 2019]
    arr_in.insert(1,2021)	## index = 1, value=2021
    arr_in					# ['math', 2021, 'biology', 1989, 2019]
    
    ### del --> 제거할 항목의 인덱스에 따라 delete; 삭제된 값은 확인할 수 없음
    arr_del = [1, 2, 3, 4, 5]
    del arr_del[0]			## index=0 의 자리 자료를 del
    arr_del					# [2, 3, 4, 5]​
    
    ### remove --> 삭제할 value를 알고 있어야함, 중복값의 경우 index의 순서에 따라 앞에 있는 값만 삭제
    arr = [1, 2, 3, 4, 5,1,1,1]
    arr.remove(2)			## value=2 삭제 # [1, 3, 4, 5,1,1,1]
    arr.remove(1)			## value=1 삭제; 중복값이기에 처음나온 1이 삭제됨
    print(arr)				# [3, 4, 5,1,1,1]
    
    ### pop() --> 리스트의 특정위치 value만 축출 저장; (pop 활용예시 : 웹에서 로그아웃한 특정 사용자를 빼놨다가, 재접속 및 로그인을 위해서 사용자 목록에 다시 넣음)
    arr_pop = [1, 2, 3, 4, 5,8,9,10]
    p_1 = arr_pop.pop()		## 리스트 마지막 value 축출 저장
    print(arr_pop)			# [1, 2, 3, 4, 5, 8, 9]
    print(p_1)				# 10
    p_2 = arr_pop.pop(1)	## 1번째 자리의 value 축출 저장
    print(arr_pop)			# [1, 3, 4, 5, 8, 9]
    print(p_2)				# 2
    
    ### extent() --> 리스트끼리 합치기
    arr_one = [1, 2, 3, 4, 5]
    arr_two = [1, 2, 3]
    arr_one.extend(arr_two)	## arr_one을 arr_two와 붙이기
    arr_one					#[1, 2, 3, 4, 5, 1, 2, 3]
    
    ### sum() --> 리스트의 모든 수를 sum
    arr = [1, 2, 3, 4, 5]
    sum(arr)				# 15
    
    ### count() --> 리스트안에 특정value 갯수 count
    arr = [1, 1, 1, 2, 3]
    print(arr.count(1))		# 3
    print(arr.count(2))		# 1
    print(arr.count(3))		# 1
    
    ### len() --> 리스트의 length 확인
    arr = [1, 2, 3, 4, 5, 'f']
    len(arr)				# 6
    
    ### index() --> 리스트의 범위에서 특정 value의 index 추출
    arr_two = ['a', 'b', 'c', 'd', 'e', 'a', 'b']
    print(arr_two.index('a', 1))	## 1번 index부터 시작해서 'a'가 나오는 index 추출	
    # 5
    print(arr_two.index('a', 1, 5)) ## 1번 index부터 시작해 4번째까지중 'a'가 나오는 index 추출
    # ValueError: 'a' is not in list ## 1~4사이에는 'a'가 없어서 error가 도출됨
    # print(arr_two.index('b', 1, 3)) # 1
    
    ### min() --> 최소값 추출
    arr = [4, 3, 2.5, 7, 0.7, 9]
    min(arr)				# 0.7
    
    ### sort() --> 리스트 내부의 value자체의 순서를 정렬 저장 // sorted() --> 리스트 내부 순서 유지, 정렬된 순서로 출력만 함.
    arr = [4, 3, 2.5, 7, 0.7, 9]
    arr.sort(reverse=True)				## 정렬 함수는 리스트 내부 내림차순 정렬의 한다.
    print(arr)							# [9, 7, 4, 3, 2.5, 0.7]
    arr = [4, 3, 0.5, 7, 0.7, 9]
    print(sorted(arr, reverse=True))	# [9, 7, 4, 3, 0.7, 0.5]
    arr									# [4, 3, 0.5, 7, 0.7, 9]


  8. 리스트 슬라이싱
    # 리스트 예시
    
    # s = [11,22,33,44,55]
    
    # print(s[0:4]) #0인덱스 부터 4 전까지지
    
    # print(s[0:2]) #인덱스 1부터 2전까지
    
    # print(s[0:5:2]) #인덱스 0에서 인덱스 5전까지 2의 간격으로로
    
    # print(s[-3:-1]) #뒤에서 3번째부터 뒤에셔 1번째 전까지
    
    # print(s[3:1]) #반대방향으로는 안됨​

튜플 ( )

  1. immutable : 변경 불가능
  2. 튜플은 특정값과 인덱스에 대한 값 변경 불가능. --> 리스트와의 차이점
  3. 튜플 ( ) 메소드 활용
    ## count() --> 튜플 내 해당 숫자가 몇 개인지 세는 기능
    my_tuple = (1, 3, 4, 5, 2, 3, 4, 6, 7, 2)	## 튜플 지정
    x = my_tuple.count(4)					 	## 4의 갯수를 세어주는 메소드 지정
    x										  	# 2
    
    ## index() --> 특정 값의 인덱스(순서)를 알려주는 기능
    my_tuple = (1, 3, 7, 2, 7, 5, 3, 2, 9, 3)	## 튜플 지정
    my_tuple.index(7)							# 2

딕셔너리 { }

  1. key를 기반으로 값을 저장
  2. 내부적으로 해시테이블로 구현
  3. 딕셔너리 선언형식
    # 딕셔너리 선언 형식
    eng_sp = dict()			# {}
    eng_sp['one'] = 'uno'	#{one:uno}
    eng_sp = {'one': 'uno', 'two': 'dos', 'three': 'tres'}
  4. dict{} 메소드 활용
    ## clear() --> 딕셔너리 내부 값 모두 삭제
    car = {"brand": "Honda","model": "CR-V","year": 2002}
    car.clear()				# {}
    
    ## copy() --> 딕셔너리 copy
    car = {"brand": "Honda","model": "CR-V","year": 2002}
    carbon_copy = car.copy()
    print(carbon_copy) 		# {"brand": "Honda","model": "CR-V","year": 2002}
    
    ## fromkeys() --> key값과 value 지정
    x = ('key1', 'key2', 'key3')
    y = 1
    new_dict = dict.fromkeys(x, y)	# {'key1': 1, 'key2': 1, 'key3': 1}
    dict_without_values = dict.fromkeys(x) # {'key1': None, 'key2': None, 'key3': None}
    
    ## get() --> key 값으로 value 도출
    car = {"brand": "Honda",model": "CR-V","year": 2002}
    car.get("model")		# 'CR-V'
    
    ## items() --> 딕셔너리 key값과 value값을 리스트 속의 튜츨로 추출
    car = {"brand": "Honda","model": "CR-V","year": 2002}
    car.items()				# dict_items([('brand', 'Honda'), ('model', 'CR-V'), ('year', 2002)])
    
    ## keys()
    car.keys()				# dict_keys(['brand', 'model', 'year'])
    
    ## pop()
    car.pop("model")		# 'CR-V'
    
    ## popitem()

MRO

전체 클래스를 확인하는 메소드 실행 방식