wecode TIL day 6 (Oct 24)

Jae Hoon Shin, 신재훈, Noah·2020년 10월 24일
0

wecode에서 보내는 첫 번째 토요일. 8 번째 토요일이 될 때까지 포기하지말자. 매일 천천히 꾸준히. 남들보다 많이 느리지만 비교하지 말고 멈추지말자.

wecode 에서 백앤드가 아래 사진처럼 횟불하나 들고 동굴을 통과하는 것 같다고 배웠는데
나는 지금 저 동굴을 들어갈 자격이 되는지 검사받는 기분이다.😱

List Slicing

피자 한판에서 한 조각을 slice라고 하듯이 리스트의 부분들을 복사하는 기능이다.

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]

여기 bts 라는 리스트가 선언 되었는데 총 7명이므로 7개의 요소가 있습니다.

bts_sub = bts[1:4]

라고 한다면 ["제이홉", "진", "정국"] 이렇게 됩니다.
공식은 여기서 stop 이 포함이 아니라 비포함입니다!!! 중요!!! [3:8] 이라면
0 1 2 3 4 5 6 7 8 이렇게 bold &빗금 쳐진 3,4,5,6,7 이 [3:8] 입니다.

Slicing Steps

list slicing에는 start 와 stop 그리고 한 가지 더!
Step 입니다.
step은 걸음걸이인데, 한번에 몇 요소씩 건너 뛸것인가를 정해줍니다.
(optional 입니다. 선언하지않으면 default값 1로 지정)

bts_sub = bts [1:4:2]
위 처럼 선언하면 어떻게 될까요

Slicing Tip

처음부터 stop까지 start 부터 끝까지!

🔥참고로 조심해야할 점은, slicing은 오리지널 리스트를 수정하는게 아니라 새로운 리스트를 만들어 낸다는 것입니다. !!!!!!

Assignment
Input으로 주어진 리스트를 slicing 하여 다음 3종류의 sub list를 출력하세요.

리스트의 처음부터 중간까지.
리스트의 중간부터 끝까지.
리스트의 2번째 요소부터 5번째 요소까지 (5번째 요소 포함해서).

예를 들어, 다음과 같은 리스트가 input으로 들어왔다면:

my_list = [1, 2, 3, 4, 5, 6, 7, 8]

다음과 같이 출력되어야 합니다.

[1, 2, 3, 4]

[5, 6, 7, 8]

[2, 3, 4, 5]

my_list = [s for s in input().split()] # 처음에 주어진 것

n = len(my_list)

sub_list1 = my_list [ : n//2 ]  # 리스트 처음부터 중간까지
sub_list2 = my_list [ n//2 : ] # 리스트 중간부터 끝까지
sub_list3 = my_list [ 1 : 5 ] # 리스트 2번째 ~ 5번째 (포함)

print (sub_list1)
print (sub_list2)
print (sub_list3)

첫줄 빼고 다 내가 썼는데, 천천히 로직 정리하고, 한줄 씩 프린트 하진 않았지만 한줄씩 주석 써가면서 천천히 했더니 됬다! 5분 컷
그런데 n//2에 정신 팔려서 리스트는 0 부터 시작한다는것을 잠깐 까먹었었다.
그렇게 중요하다고 했는데,,,반성해야겠다.

Deleting Elements From List

Del

Del키워드를 이용해서 리스트에서 트와이스 멤버 1명을 삭제할 수 있다.

twice = [ "나연", "사나", "정연", "모모", "미나", "채영", "다현", "쯔위", "지효"]
print(twice)
['나연', '사나', '정연', '모모', '미나', '채영', '다현', '쯔위', '지효']

del twice[3]
print(twice)
['나연', '사나', '정연', '미나', '채영', '다현', '쯔위', '지효']

Remove

del 키워드로 요소를 리스트에서 삭제하는 방법의 단점은 index를 사용해야 한다는 것! 만약 다른 방법이 필요하면
remove! (method)

twice.remove ("모모")

Assignment

Input으로 주어진 리스트에서 홀수는 전부 지우고 짝수만 남은 리스트를 리턴해주세요.
리스트의 요소들은 전부 숫자값이고 총 요소 수는 5개 입니다.

예를 들어, 다음과 같은 list가 input으로 주어졌다면:

[1, 2, 3, 4, 5]

다음과 같은 결과물이 리턴되어야 합니다.

[2, 4]

삐빅 👷🏼‍♂️ 🚧 ⛏ 삽질 구간입니다.

처음에 아래처럼 했다.

def remove_odd_numbers(numbers):
  #이 함수를 구현해주세요
  if numbers[0] % 2 != 0:
    del numbers[0]
  if numbers[1] % 2 != 0:
    del numbers[1]  
  if numbers[2] % 2 != 0:
    del numbers[2]
  if numbers[3] % 2 != 0:
    del numbers[3]
  if numbers[4] % 2 != 0:
    del numbers[4]
  return numbers

난 처음부터 천천히 시작할려고 했는데 계속 에러가 떠서
직접 하나하나 해봤더니 맙소사
del 키워드를 쓰니까 [0] 자리에 다른 숫자가 채워지고 하나씩 땡겨져서 내가 원하는 output이 안나왔다. 그래서 거꾸로 하니까 됬다.

삐빅 👷🏼‍♂️ 🚧 ⛏ 처음에 구조짜는 것도 애먹었다
문제에 " 총 요소 수는 5개 라고 적혀 있는데, 그걸 읽지 못하고 모든 경우의 수 input을 위한 코드를 만들려다 보니까 로직이 막 엉켜서 시작을 어렵게 하고 있었다. 그런데 요소 수 5개만 이라는 조언을 들었고, 그 뒤로 다시 찬찬히 쉽게 쉽게 생각하며 짰다.

Tuples

리스트같이 데이터들을 저장하게 해주는 것들을 data structure(자료구조) 라고 합니다.

리스트와 튜플의 다른 점

List는 수정이 가능하지만 Tuple은 한번 선언되면 수정이 불가능합니다.
(처음에 이거 배우면서 " ? 그러면 코드 한번 입력하면 backspace로 안 지워지나?" 라고 생각한 난 진짜 바본가... 재밌었다.)

Tuple 선언 방법

선언방법만 일반괄호로 다르고 Tuple 요소를 읽어들이는 방법, slicing은 모두 list와 동일
이렇게 유사한데!! 튜플은!! 언제 사용되는 걸까요!!??!!

일단 아래 사진 둘다 동일한 데이터 입니다.하지만 이 경우엔 Tuple이 더 효과적입니다. 이유는 리스트는 수정이 가능하고 여러 수의 요소들을 저장할 수 있어서 메모리 용량이 더 큽니다. 수정이 필요없고 간단한 형태의 데이터를 표현할 때는 tuple을 사용하는게 훨씬 더 효과적입니다.

Assignment

Input으로 주어진 list를 3개의 tuples로 구성된 리스트로 변환하여 리턴해주세요.
Input 리스트는 정확히 6개의 요소를 가지고 있습니다.

예를 들어, 다음과 같은 list를 input으로 받았다면:

my_list = [1, 2, 3, 4, 5, 6]

다음과 같이 리턴해야 합니다.

[(1,2), (3, 4), (5,6)]

삐빅 👷🏼‍♂️ 🚧 ⛏ 삽질 구간입니다.

처음에 빈 리스트를 (그러니까 인풋 받을 리스트를) 튜플로 바꾸는 법을 몰라서 애먹었다.
접근을 못하다가 그냥 ()로 덥혀 씌우는것으로 합의를 봤고,
새로운 빈 리스트에다가 2개씩 넣기로 했다, (0,1) (2,3) (4,5) 이렇게 append로 넣기로 했다.
이것도 삽집 오래 했다.

Set

세트는 list의 친척입니다.

List 와 마찬가지로 여러 다양한 타입의 요소(element)들을 저장할 수 있습니다.

하지만!! 다른점! 순서가 없습니다! 무작위로 읽어옵니다.
순서가 없어서 indexing도 없습니다. 몇 번째 요소를 불러올 수 없습니다.
중복된 값을 존재할 수 없습니다. 동일한 요소가 존재하면 새로운 요소가 이전 요소를 치환 (replace)합니다.

Set 생성하는 법 2가지


중괄호로 감싸고 되고, 또는 set()함수를 사용하면 되지만
set()함수를 사용하는 경우는 list를 set로 변환하고 싶은 때 사용합니다.

리스트에서 .append로 요소를 추가했다면 (순서대로 추가)

set에서는 .add로 요소를 더 한다.
삭제할 때는 .remove

Look Up

Set에 어떠한 값이 이미 포함되어 있는지 알아보는 것을 look up 이라고 합니다. Set에서 look up을 하기 위해서는 in 키워드를 사용해야 합니다.or not in

Intersection & Union (교집합 & 합집합)


& 쓰거나 .intersection() 함수 쓰거나,
| 쓰거나 .union() 함수 쓰거나

Assignment

왼쪽 상단의 get_unique_numbers_count 함수를 구현해주세요.
get_unique_numbers_count 함수는 numbers 라는 parameter를 받습니다.
numbers는 list 입니다. Numbers의 고유 값들의 수를 리턴해주면 됩니다.

예를 들어, 다음과 같은 input이 들어왔다면:

[1, 2, 1, 1, 3, 4, 5]

5를 리턴해주면 됩니다.

어려울줄 알고 헤매고 있었는데, 그린대로 해보니까 됬다,,,?!

def get_unique_numbers_count(numbers):
  #이 함수를 구현해주세요!
  numbers = set(numbers)
  
  return len(numbers)

로직이 맞다고 생각하며 적었고 타이핑 했다 근데 submit 버튼을 누를 때 설마 되겠어? 음.. 최근에 삽질만 너무해서 내 코드에 자신감이 없어진 것 같다. 그래도 뭐.. 어쩔 수 없으니까..JUST DO IT🔥

Dictionary

딕셔너리도 한 타입의 자료구조
기본적인 문법

-- 중괄호 { } 를 사용해 dictionary를 선언한다.
-- key 와 value 의 값으로 이루어져 있다. key 값이 먼저 나오고 그리고 : 이 위치하고 그 다음에 value 값이 나온다.
-- 각각의 key : value 들은 comma 로 구분한다.

Dictionary에서 요소(element) 읽어들이기

List와 차이점은 요소의 index를 사용하는것이 아니라 key 값을 사용한다는 점입니다.

Key 는 string 뿐만이 아니라 숫자도 가능합니다. !!
Key 값은 중복될 수 없습니다. !!!
Key 값이 중복될 수 없다는 것은 꼭 기억해야 합니다.
만일 이미 존재하는 key 값이 또 추가 되면 기존의 key값의 요소를 치환하게 됩니다.

Dictionary에서 새로운 요소(element) 추가하기

이것만 보면 약간 헷갈릴 수 있으니
key가 중복되서 치환되는 과정

Dictionary 에서 요소 수정 하기

수정하는 법도 list 와 유사합니다.차이점은 index가 아니라 key 값을 사용한다는점!!처음 부터 비어 있는 딕셔너리를 만든 다음에 하나씩 추가해나가는 것도 가능.

Dictionary 에서 요소 삭제 하기

key 값을 삭제해야함!!!!!!

Assignment

BTS 멤버중 하나인 "지민"의 다음 사항들을 인터넷 검색을 통해서 찾으셔서 dictionary로 구현하여 출력해주세요:

가명
본명
생년월일
출생지
포지션
학력

힌트: 다음 링크를 참고하시면 위의 정보들을 찾을 수 있습니다.

https://bit.ly/2zOgUcf

jimin = {
"가명": "지민",
"본명": "박지민",
"생년월일": "1995년 10월 13일",
"출생지": "대한민국 부산광역시 금정구 금사동",
"학력": "글로벌사이버대학교 방송연예학과",
"포지션": "리드 보컬, 메인 댄서"
}
print(jimin)

간단한 기본 문법과제였다.

profile
🇰🇷🇺🇸 #Back-End Engineer

0개의 댓글