List 배열
1) List를 통해 한 줄에 여러 값을 한번에 받기
한 줄에 여러 값을 받는 방법은 a , b = map(int, input().split())와 같은 방식으로 받을 수 있다.(숫자가 아닐 경우 a,b = input().split() ) 이와 같은 방식으로 받게 될 경우 한줄에 받을 수 있는 개수가 한정되어 있다.
a,b = map(int, input().split())으로 했을 때, 띄어쓰기 기준으로 숫자 2개를 정확히 받아야한다. 띄어쓰기 기준으로 나뉜 숫자의 수가 2개 미만이거나 2개를 초과하는 경우 에러가 발생한다.
이때, map을 통해 받는 것을 list를 통해 받으면 문제가 없어진다.
1-1) 여러 문자를 한줄에 받을 때, list_name = input.split()
a,b 와 같은 변수로 받을때와 다르게 map( ) 겉에 list( )를 씌웠다. 이유는 다음과 같다.
words_list = input().split()을 통해 sam zack tom sua를 입력받았다면
① input( )을 통해 문자열 "sam zack tom sua"을 입력 받는다.
② input( )으로 받은 문자열을 split()을 통해 띄어쓰기 기준으로 "sam" "zack" "tom" "sua"로 쪼갠다.
③ split( )은 쪼갠 후 그 값을 ["sam", "zack", "tom", "sua"]라는 list로 만든다.
④ ["sam", "zack", "tom", "sua"]인 list를 words_list라는 변수 명에 대입한다.
⑤ words_list는 ["sam", "zack", "tom", "sua"]인 list가 된다.
=> words_list = list(input().split())을 해도 결과는 동일하다.(밑 숫자와 비슷하게)
하지만, words_list = [input().split()]은 다른 결과가 나온다.(생성할 때와 비슷하게)
words_list = list(input().split()) 혹은 list_name = input.split() => ["sam", "zack", "tom", "sua"]
words_list = [input().split()] => [["sam", "zack", "tom", "sua"]]
이처럼 양 끝에 [ ] 가 추가된다.
1-1-1) list( ) 함수 이해
list ( ) 의 경우 괄호 안에 있는 인자를 list로 만들어준다.
양 끝에 [ ]를 추가하는 경우는 [ ] 안에 있는 인자들로 list로 만든다.
예를들어 설명을 해보면,
list("abc") => ["a", "b", "c"]
list(["a", "b", "c"]) = > ["a", "b", "c"]
list(("a", "b", "c")) =>["a", "b", "c"]
list((1, 2, 3)) => [1, 2, 3]
list([1, 2, 3]) => [1, 2, 3]
이처럼 list( ) 함수에서 ( )안에 인자가 문자열이면, 다 쪼개서 list로 만들고, 이미 list인 형태면, 그 list 그대로 내놓는다.
여기서 ( )와 [ ]는 같게 취급된다.
list((["a", "b", "c"])) = >[["a", "b", "c"]]
list((["a", "b", "c"], ["d", "e", "f"])) = >[["a", "b", "c"], ["d", "e", "f"]]
그래서 이처럼 (( )) 이중 괄호가 되거나, [[ ]], ([ ]) 이렇게 두겹으로 하게 되면, 이중 list가 나오는 것이다.
그래서 list(input().split())와 list_name = input.split()이 같은 것이되고
list((input().split()))와 [input().split()]이 같은 것이 된다.
1-2) list_name = list(map(int, input().split())
num_list = list(map(int, input().split())을 통해 1 2 3 4 5를 입력 받았다면
① input( )을 통해 문자열 "1 2 3 4 5"를 입력받는다.
② input( )으로 받은 문자열을 split()을 통해 띄어쓰기 기준으로 "1" "2" "3" "4" "5"로 쪼갠다.
③ split( )은 쪼갠 후 그 값을 ["1", "2", "3", "4", "5"]라는 list로 만든다.
④ split( )으로 만들어진 list를 map( )을 통해 각각의 문자들("1","2" ...)의 타입을 int 형으로 바꿔준다.
⑤ map( )으로 int형으로 바뀐 각각의 문자들을 list( )를 통해 [1, 2, 3, 4, 5]로 만든다.
⑥ [1, 2, 3, 4, 5]인 list를 num_list라는 변수 명에 대입한다.
⑦ num_list는 [1, 2, 3, 4, 5]인 list가 된다.
=> num_list = [map(input().split())]으로 사용할 수 없다. 그 이유는 map( ) 함수는 split( )처럼 바로 list 형태로 반환하는 것이 아니라, map object라는 형태로 반환한다.
[ ]의 경우 대괄호 안에 있는 값으로 list를 만드는 것이므로 [<map object at .... >] 와 같은 형태로 맵 오브젝트가 들어간다.
[1, 2, 3, 4, 5] 와 같은 형태를 출력하기 위해서는 이 맵 오프젝트를 list( ) 함수를 통해 list 형태로 만들어줘야한다.