14. TIL (List,Tuple,Set,Dictionary)

dream.log·2021년 7월 12일
0

TIL

목록 보기
12/42
post-thumbnail

오늘은 비슷한 개념이라 헷갈리기 좋은 List,Tuple, Set, Dictionary를 각각 비교하며 개념을 확립해 나가보고자 한다! 🙂

개념을 정확하게 익히고, 필요할 때 문법에 맞춰 적재적소 꺼내쓸 수 있을만큼 복습을 열심히 하자!


1. List

대괄호 [ ] 를 통해 원하는 값을 나열하는 방식으로 생성할 수 있으며, 각각의 값은 쉼표를 통해서 저장함

이 때, String은 " " 큰 따옴표 안에, int, boolean 등은 그 자체로 작성해주면 된다.
ex) values = [ "one", 2, True ]

[List에 대해 알아야 할 개념들!]

  • List의 순서는 index를 통해 표현하며, 0부터 시작한다!

  • index의 마지막은 List 길이의 -1 값을 갖는다.

  • 전체의 길이를 알기 위해서는?
    values.len() 을 활용할 수 있음

  • List 또한 List의 요소가 될 수 있다. 이러한 List를
    Multi-dimensional list (다차원 리스트)라고 칭한다!
    ex) [["정우성",40], ["수지",28]]

  • 다차원 리스트의 데이터는 접근하려는 깊이만큼 브라켓을 추가하여 데이터에 접근할 수 있다.
    처음 접근하려는 차원의 데이터가 List라면 다시 [] 추가하여 index로 다음 차원의 데이터에 접근할 수 있다!
    ex)

    any_list = [[1,2,3],[4,5,6][7,8,9]10,11] 
    any_list[2][1] : 2번째 index의 1번째 항목 _ 8 출력!
    any_list.append(20) : 11 뒤 20이 붙음
  • list에서 데이터를 추가할 때
    list_name.append(추가내용) 의 방식으로 가능함.
    append를 사용하면 가장 뒤에 데이터가 위치하게됨!
    ⭐️ 원하는 위치에 데이터를 넣으려면? insert를 사용한다!
    list_name.insert(1,8) : 1번째 위치에 정수 8넣기

  • list에서 데이터를 제거할 때
    pop을 사용한다. list_name.pop() : 맨 뒤 데이터 제거
    pop도 insert 처럼 (위치,데이터) 를 삽입하면 원하는 위치의 데이터를 제거할 수 있다.

  • list의 데이터가 많아 특정 데이터의 index 위치가 궁금할 때:
    list.index(특정데이터) 의 방식으로 위치를 알 수 있다!
    출력이 필요하면 print 찍어보기!

  • List의 Index를 호출할 때는 [] 대괄호에 숫자를 넣어 호출한다.

  • List는 각각의 Index에 담긴 데이터를 자유롭게 수정할 수 있다.
    ex) 상단의 numbers List의 데이터를 수정한다면?
    numbers[0] = 30 numbers list data의 첫번째 값을 30으로 수정!

  • List에 추가할 element가 1개 이상일 때는? '+'를 활용할 수 있다!
    단순 요소를 합할 때도 사용되지만, List와 List도 합해줄 수 있다.

    list1 = [1,2,3,4] 
    list2 = [5,6,7]
    list1 = list1 + list2
    print(list1) [1,2,3,4,5,6,7] 
  • 비어있는 리스트 생성하기

    my_list = []
    my_list.apppend(1)
    my_list = my_list + [2.3]
    print (my_list)
  • list slicing : 리스트의 일부분을 따로 copy하기
    (slicing은 list의 내용을 수정하는 것이 아닌 새로운 list를
    만들어내는 것이다!)
    list_name [start : stop : step]
    ☑️ 유의할 점은 stop index는 표현하고자 하는 index number + 1
    해서 기재해주어야 한다. list가 멈추는 부분의 index는 포함되지 않기 때문!!
    step은 옵션이기 때문에 선언해주지 않아도 된다. 선언이 되지 않으면,
    defalut 값은 1이다!
    ☑️ list slicing 시 첫 index를 빈칸으로 남겨두면?
    해당 리스트의 첫 요소부터 시작해서 출력됨!
    ☑️ list slicing 시 마지막 index를 빈칸으로 남겨두면?
    : start index부터 끝까지 값으로 가져온다!
    ex)
    food = [ "닭가슴살" , "과일" , "삼겹살" , "보리밥", "닭갈비" ]
    food_sub = food [ 0:3:2 ] 
    print (food_sub)
    : 0번부터 2개씩 건너뛰어서 닭가슴살, 삼겹살이 출력됨!
    food_sub = food [ :2 ] : 0부터 1까지 - 닭가슴살, 과일 출력
    food_sub = food [ 2:] : 2부터 끝까지 - 삼겹살, 보리밥, 닭갈비 출력
  • list에 있는 요소를 삭제하고 싶다면? del과 remove를 사용할 수 있다!
    del은 해당 index를 직접 호출해서 삭제하는 방식이고,
    remove는 해당 요소를 바로 삭제할 수 있다.
del food [3] : 보리밥 삭제. 요소가 하나씩 당겨짐
food.remove("보리밥")

2. Tuple

list와 비슷하게 요소를 저장할 때 쓰인다. 대괄호 대신
( ) 일반 괄호를 사용하고, list는 수정이 가능하나 tuple은
한번 선언되면 수정이 불가능하다.

  • tuple 선언 문법 : my_tuple = (1,2,3)

  • tuple 호출하기 : my_tuple [0] my_tuple [1:2] list와 똑같이 요소를 읽어들이고 slicing 할 수 있음

  • 일반적으로 tuple은 2개~5개 사이의 요소를 저장할 때 사용하며, 특정 데이터를 즉석적으로 표현하고 싶을 때 사용함!

2-1. List와 Tuple의 차이점

  • list는 수정이 가능하나 , Tuple은 수정이 불가능함.
  • 수정이 가능한 list의 특성 때문에 용량을 많이 차지하기 때문에
    수정이 필요없는 간단한 데이터는 tuple을, 수정이 필요하고 여러 기능 사용이 필요한 경우에는 list를 사용하는 것이 좋다!
  • 해당 특성으로 인해 tuple은 dictionary의 key 값으로 사용 가능하다!

3. Set

list 처럼 여러 타입의 요소를 저장할 수 있음.

  • but! list와 다르게 요소들이 순서대로 저장되지 않으며, for문에서 읽어들이면 요소가 순서대로 출력되는 것이 아니라 무작위 순서대로 나온다!
  • 순서가 없으니 indexing도 없음. 동일한 값을 가지고 있는 요소가 1개 이상 존재할 수 없다. 중복된 값이 입력된다면 새로운 요소가 이 전 요소를 치환하는 속성을 가지고 있다! (저장되지 않음)
  • set 생성하기 : set1 = {1,2,3} set2 = set({1,2,3})
    중괄호 { } 를 사용하는 방법과 set() 함수 사용하는 2가지 방법이 있다!
    • set () 함수를 사용하면 list를 parameter로 전달해야 하기 때문에
      list를 set으로 변환하고 싶을 때 주로 사용한다!
  • set에서 새로운 요소 추가하기 : add () 사용!
  • set에서 기존 요소 지우기 : remove () 사용.
    요소가 index를 가지고 있지 않기 때문에 append 사용은 적절하지 않음.
    ex)
my_set = {1,2,3,1}
print (my_set) : {1,2,3} 만 출력됨

set2 = my_set({1,2,3,1})
print(set2) : {1,2,3} 출력 

my_set.add(4) : 넣을 데이터를 ( ) 안에 표시
my_set.remove(2) : 지울 데이터를 (  ) 안에 표시
  • set 안에 요소가 포함되어 있는지 확인하는 것 : look up - in을 사용함!
    반대로, 요소가 없는지 확인하려면 not in을 사용.
my_set = {1,2,3,4}
if 1 in my_set :
	print ("1 is in the set")  
    
if 4 in my_set :
	print ("5 is not in the set")
  • set의 교집합 (&) 과 합집합 (|)
    교집합 : & , intersection()
    합집합 : | , union()
set1 = {1,2,3,4,5,6}
set2 = {4,5,6,7,8,9}

print(set1 & set2) : {4,5,6} 출력
print(set1.intersection(set2)) : {4,5,6} 출력

print(set1 | set2) : {1,2,3,4,5,6,7,8,9} 출력
print(set1.union(set2)) : {1,2,3,4,5,6,7,8,9} 출력

4. Dictionary

중괄호 { } 를 통해 선언하며, key와 Value 값으로 이루어져 있음.
각각의 key : value 들은 , 로 구분함

  • 기본 문법 : my_dic = { "key1" : "value1", "key2" : "value2"}

  • dictionary - key에 대해 기억해야할 사항들!
    - key는 string 뿐 아니라 숫자도 가능함
    - key값은 중복될 수 없음
    : 이미 존재하는 key 값이 또 추가되면 기존의 key 값의 요소를 치환하게 됨

    dodam = { "실명" : "김도담" , "영어이름" : "sally", "사는곳" : "경기도" }
    dodam["실명"] : "김도담" 이라는 value 출력
    dodam = { "실명" : "김도담" , "영어이름" : "sally", 
    "사는곳" : "경기도", "실명" : "김샐리" }
    print(dodam)
    dodam = { "실명" : "김샐리" , "영어이름" : "sally",
    "사는곳" : "경기도" } : 중복되었던 "실명" data가 나중에 있던 요소로 변경됨
  • dictionary에서 새로운 요소 추가하기
    값이 동일한 key가 이미 존재하면 새로 추가되는 요소가 그 전의 요소를 치환한다는 사실을 꼭 기억하기!
    요소를 수정해야 할 때는 key 값을 활용함
    dictionary_name[new_key] = new_value 의 형태로 기재!

    dict = {1:"one", "two":2}
    	dict["three"] = 3
    	print(dict) : {1:"one", "two":2, "three":3} 
    
  • 비어있는 dictionary 선언할 때 : { } . 요소가 없는 중괄호 사용

  • dictionary에서 요소를 삭제하는 방법 : key값 사용하기
    ex)

my_dict = { } 
my_dict[1] = "one"
my_dict[2] = "two"
print(my_dict) > {1:"one",2:"two"}
del my_dict[1] < key 값을 사용하여 삭제 

4-1. set과 dictionary의 차이

  • set과 dictionary 모두 key값을 갖는다. set의 key값은 변경이 가능하나, dictionary의 key값은 변경할 수 없다.

❗️ List , Tuple , Sey, Dictionary의 차이점 한눈에 보기


👩🏻‍💻 List 관련 : 시간이 오래걸렸던 문제들

29.Assignment

Input으로 주어진 리스트의 첫번째와 마지막 element의 값을 더한 값을 리턴 해주세요. 만일 리스트가 비어있다면 0이 리턴되어야 합니다.

⭕️ 정답

 if len(my_list) == 0 :
   return 0
 else:
   return my_list[0]+my_list[-1]
  • 비어있는 List라면 0을 return하기 위해if len(my_list) == 0 return 0 을 사용해주어야 한다.
    이러한 식을 바로바로 꺼내쓸 수 있게 익숙해지자!

37.Assignment

아래 조건을 만족하는 merge_and_swap 함수를 완성 하세요.

-2개의 리스트를 input으로 받습니다.
-input 받은 2개의 리스트를 하나의 리스트로 합칩니다.
-합쳐진 리스트의 첫 element와 마지막 element를 서로 바꾼 후 리스트 전체를 리턴 합니다.
-input 모두 빈 리스트이면 빈 리스트를 리턴합니다.

⭕️ 정답

def merge_and_swap(list1, list2):
 
 if len(list1) == 0 and len(list2) == 0:
     return list2

 list2 = list1+list2
 list2[0],list2[-1] = list2[-1],list2[0]
 
 return list2
  • 29번과 마찬가지로 비어있는 list라면 빈 리스트를 리턴하는 것을
    수식으로 작성하는 것이 조금 어려웠다. 해당 개념은 다시 헷갈리지 않게끔 꼬오오옥.. 기억하자!
    if len(list1) == 0 and len (list2) == 0 : 
       return list2 
  • 합쳐진 list의 첫 element와 마지막 element를 서로 바꾼 후 리스트 전체 리턴 => 각각의 위치를 적고 = 이후 바뀐 자리 적어주기
profile
한 걸음, 한 걸음 포기하지 않고 발전하는 Backend-developer 👩🏻‍💻 노션 페이지를 통한 취업 준비 기록과 회고를 진행하고 있습니다. 계획과 기록의 힘을 믿고, 실천하고자 합니다.

0개의 댓글