wecode TIL day 5 (Oct 23)

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

[List]

1. Store Multiple Values in one Variable using list

리스트로 다수의 데이터를 한곳에 저장 가능합니다.
List는 대괄호이며 [ ] 요소 사이사이에는 쉼표로 구분합니다.

Assignment

my_list 리스트를 만들어주세요. make_list함수의 리턴값은 ["wecode", 2020] 가 되어야 합니다.

def make_list():
	my_list = ["wecode", 2020]
    return my_list

2.Nest one List within Another List

리스트 안의 리스트는 아래와 같은 모양 입니다.:

우리는 이와 같은 리스트를 다차원 리스트라고 부릅니다.

Assignment

my_list 리스트를 만들어주세요.함수의 리턴값은 [["becoming", 29], ["developers", 30]] 가 되어야 합니다.

def multi_list():
  my_list = [["becoming", 29], ["developers", 30]]
  return my_list

3.Access List Data with Indexes

우리는 인덱스를 사용해서 리스트의 데이터에 접근할 수 있습니다.리스트의 인덱스는 '[0]' 와 같은 브라켓 노테이션을 통해 호출할 수 있습니다. 이는 문자열에서 개별 스펠링을 접근할때 와 같은 방식 입니다. 리스트 역시 문자열과 마찬가지로 0을 기준으로 인덱스를 시작합니다.

def list_index():
    # 아래의 코드는 변경하지 마세요.
    my_list = [50, 60, 70];
  
    # 아래에 코드를 작성해주세요.
    first_value = my_list[0]

    # 아래의 코드는 변경하지 마세요.
    return first_value

Assignment

주어진 리스트 my_list 에서 첫번째 데이터를 반환하는 list_index() 함수가 동작하도록 작성해주세요.

def list_index():
    # 아래의 코드는 변경하지 마세요.
    my_list = [50, 60, 70];
  
    # 아래에 코드를 작성해주세요.
    first_value = my_list[0]

    # 아래의 코드는 변경하지 마세요.
    return first_value

4.리스트는 각각의 인덱스에 담긴 데이터에 대한 수정이 자유롭습니다.

Assignment

my_list의 데이터 내용중 인덱스 첫 번 요소에 대해 72로 수정해서 리턴하는 modify_list 함수가 정상 작동하도록 작성해주세요.

def modify_list():
    # 아래의 코드를 수정하지 마세요.
    my_list = [18,64,99];
 
    # 아래에 코드를 작성해주세요.
    my_list[0] = 72 
 
    # 아래의 코드를 수정하지 마세요.
    return my_list;

5.다차원 리스트의 접근

처음 접근하는 차원의 인덱스안에 리스트가 다시 존재한다면 해당 차원의 인덱스를 다시 호출하면 우리는 원하는 데이터에 접근 할수 있습니다.

Assignment

브라켓 노테이션을 사용해서 주어진 리스트 my_list의 요소중 숫자 8을 리턴하는 함수 access_list()를 완성해주세요.

def access_list():
    # 아래의 코드는 변경하지 마세요. 
    my_list = [[1,2,3], [4,5,6], [7,8,9], [[10,11,12], 13, 14]];

    # 아래의 코드만 변경해 주세요.
    my_data = my_list[2][1];
  
    # 아래의 코드는 변경하지 마세요.
    return my_data;

여기까지 어렵지 않았다.

6.Manipulate Lists With append( )

리스트에 새로운 값을 추가하고 싶습니다.

append() 메소드가 있습니다.

append 메소드는 리스트의 가장 끝에 값을 추가합니다.

Assignment

Push ["dog", 3] onto the end of the myArray variable.

def list_append():
    # 아래의 코드는 수정하지 마세요.
    my_list = [["John", 23], ["cat", 2]];

    # 아래에 코드를 작성해 주세요.  
    my_list.append(["dog",3])
    # 아래의 코드는 수정하지 마세요.
    return my_list;

여기까지 쉬웠다. 기본적인 리스트 문법 익히기 단계

7.Manipulate Lists With pop( )

리스트에 요소를 추가하는 append()가 있었다면, 뒤에서부터 요소를 제거하는 pop()이라는 메서드도 존재합니다

Assignment

pop()메서드를 사용해서 마지막요소를 제거하는 함수 list_pop()을 완성해주세요.

def list_pop():
    # 아래의 코드는 수정하지 마세요.
    my_list = [["John", 23], ["cat", 2]];

    # 아래에 코드를 작성해 주세요.
    my_list.pop()

    # 아래의 코드는 수정하지 마세요.
    return my_list;

Lists

List를 사용하면 여러 값들을 순차열 적으로 저장할 수 있습니다.

List에 저장되어 있는 값은 "element" 입니다.

아래 사진처럼 string 이외에도 숫자, boolean 값 등 모든 type의 값을 저장 할 수 있으며 서로 다른 type의 값들을 저장하는것도 가능합니다.

list에는 순서(ordering)가 존재 합니다.

이 순서는 0번 부터 시작하는데 이러한 순서를 리스트의 index 라고 합니다.

(index의 마지막은 n-1)

Assignment

🔥

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

예를 들어, 다음의 리스트가 주어졌다면:

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

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

6

만일 다음의 리스트가 주어졌다면:

inputs = [1]

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

1

Hint: list의 총길이는 다음처럼 len 함수를 사용해서 알아낼 수 있습니다.

length = len(inputs)

쉬울줄 알고 덤볐는데 생각보다 삽질 많이 했다. 일단 코드를 보자

def add_first_and_last_elements(my_list):
  #이 함수를 구현해주세요
  n = len(my_list)
  
  if n == 0:
    return 0
  elif n == 1:
    return my_list[0]
  else:
    return my_list [0] + my_list[-1]
  
  return my_list

위 코드가 정답인데,,, 중간 부분을

n = len(my_list)
my_list [0] + my_list[-1]
 if n == 0:
    return 0
 elif n == 1:
    return my_list[0]

아직 if문의 로직을 이해를 못하는 건지 내가 로직이 약한건지 힘들었다.
내가 처음 생각했을 때,
첫번째와 마지막의 수를 더하고
만약 리스트 총 길이가 0개라면 0을 리턴하고
만약 리스트 총 길이가 1개라면 첫번째 (그 한개) 를 리턴하라
라고 생각하고 코드를 짰는데,
나는 아직도 else: 부분이 약한것 같다.
else 개념.. 나머지 다..

Adding And Changing Elements To List


중요 !! 추가하다의 add가 아닌
덧붙이다의 append => 마지막 순서로 덧붙인다는 뜻.
하지만 ! 추가하고자 하는 element가 한개 이상일때는 append 대신에 + !!!!

list에서 + 를 사용하여 element들을 추가 할때는 대괄호 ([]) 를 사용하여 리스트의 형태로 만든후 추가해야 합니다.

즉, + 는 list와 list를 합하여 줍니다.

주의 !!

+ 를 사용하면 기존의 list가 수정되지 않고 기존의 list와 다른 새로운 list가 생성되기 때문입니다.
그럼으로 새로 생성된 list를 변수에 다시 지정해 주지 않으면 기존 list들은 수정이 되지 않은 상태로 남아있게 됩니다.

아래 사진을 보고 정확하게 이해해야한다.
리스트 1 은 1234
리스트 2 는 567
리스트 1 + 리스트 2
하지만 리스트라는 변수에 안 넣어줬으니까
이제 까지 숫자도 n
num = 12
num + 12
num 프린트 하면 24 인가? (내생각은 맞지만) 컴퓨터한텐 아니다
num = num + 12 이고 이걸 간결하게 한게
num += 12 이다. 컴퓨터처럼 생각해야 한다.

3. insert

Append 와 + 를 사용해서 list에 새로운 element를 추가 삽입할수 있다 (원하는 위치에!!!!).

예를 들어 이 사진을 보자
제주특별자치도 제주시 를 서울특별시 아래에 넣고 싶다. 1, 제주시 니까 2번째 (0부터 시작)

Empty List

처음에는 비어있는 list를 생성한다음에 나중에 element들을 추가 할 수도 있습니다.
Empty list, 즉 비어있는 list는 아무런 element 없는 비어있는 대괄호( [ ] )로 생성할 수 있습니다. 이렇게 하면 [1,2,3]

Updating Elements

3번째인 인천이 성남으로 바뀐다(0부터 시작)

Assignment

🔥🔥🔥

주어진 2개의 리스트를 하나의 리스트로 합친 후 리스트의 첫 element와 마지막 element를 서로 바꿔준 후 리스트 전체를 출력해주세요.

예를 들어, 다음과 같은 2개의 리스트가 주어졌다면

list1 = [1, 2, 3, 4, 5]
list2 = [6, 7]

출력되야 하는 결과물은 다음과 같습니다,

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

두개 다 빈 리스트가 들어온다면 빈리스트를 반환해야 합니다.

일단 정답코드 먼저 !

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

    return []
  else:
    list1 + list2
    list1 = list1 + list2
    one = list1[0]
    last = list1[-1]
    list1[-1] = one
    list1[0] = last
    return list1

코드 해석:
첫 번째 리스트와 두 번째 리스트가 비었다면 빈 리스트를 리턴하라

그거말고는
첫 번째 리스트와 두 번째 리스트를 합치고
합친것은 list1 이다.
one 을 (지금)list1의 첫번째라 하겠고
last 를 (지금)list1의 마지막이라 하겠다.

삽질 👷🏼‍♂️ 🚧 ⛏

주의!! 여기서 40분 삽질한것이, (잘못 생각했던것이 !)
one 을 list1, last를 list1의 마지막, ; 이렇게 해도 자리 [] 로 배정한것이여서 나중에 변수가 바뀌는줄알고

list1[-1] = one
list1[0] = last

위 코드를 쓰면, 첫 번째가 마지막이 되고, 마지막이 첫 번째가 되고, 이렇게 무한 루프에 빠지는 줄 알았다. 하지만 동기분에게 도움요청하였더니
one = list1[0] <<<이렇게 한번 변수로 정하면 저 one은 딱 저때의 (위에 (지금)이라고 쓴것처럼) list[0] 이 저장된다는 것이였다. 진짜 기초개념이 부족하다는것을 또 알았고 컴퓨터처럼 생각해야된다고 생각했다.

그리고 또 삽질 👷🏼‍♂️ 🚧 ⛏

맨위에 코드를 보면

if len(list1) == 0 and len(list2) == 0:

위 코드를 len 이 붙어서 숫자로 써야하는데 아래처럼

if len(list1) == [] and len(list2) == []:

로 써서 30분 삽질 했다.

마지막 assignment 총 3시간은 삽질한 것 같다.

배운 점: 동기분이 중요한 조언을 해주셨다.

이번 merge and swap assignment( 오늘 TIL의 마지막)을 할 때 지금 한번에 3가지 할려고 하는거 아시냐고 물으시길래 머리위에 ? 가 떴다. 동기분 말씀이 그림으로 그리는것도 좋지만 중간 중간 코드에 print 집어 넣어보면서 하나하나 step by step으로 하라는 말씀이셨다. 예를 들어
merge하고 프린트 하고,
첫번째를 마지막으로 바꾸고 프린트하고,
마지막을 첫번째로 바꾸고 프린트하고,
이렇게 천천히 해도 된다고 하셨다. 그리고 코드 뒤에 주석 붙여서 헷갈리지 않게 짧은 설명도 도움이 된다고 하셨따..
결론: 동기사랑💜 나라사랑💜

profile
🇰🇷🇺🇸 #Back-End Engineer

0개의 댓글