728x90
반응형

List 배열 with generator(제너레이터)

1) List를 통해 여러 줄에 걸쳐 여러 숫자 값 나눠 받기

앞서 다룬 [[word for word in input().split()] for y in range(num)]을 통해서는 문자(열)들만 2차원 배열로 받을 수 있다.
이는 input().split()이 입력 받는 값을 문자로 인식하기 때문이다.

숫자로 받기 위해서는 이제까지 해왔던 것 처럼 map을 활용하면 된다. 그리고 [word for word in input().split()] 이 부분만 변경해주면 된다.
아니면, 문자로 받은 값을 int( )로 형 변환을 해도 된다. int(input().split()) 이런 것은 안되지만, generator를 통해서 할때에는 input().split()으로 받은 list를 형 변환 하는 것이 아니라, 각각의 값을 형변환 하는 형식으로 구성하면 된다.

2) map( ) 함수를 활용하여 여러 줄에 걸쳐 숫자(들)을 받을 때,

[[num for num in map(int, input().split())] for y in range(num<-숫자 혹은 int 타입 변수)]

range( )나 map( )함수의 리턴 값은 완전한 list가 아니지만, 이렇게 사용할 때는 list로 사용이 가능하다.
map(int, inpu().split())을 통해 [0, 1, 2] 와 같은 리스트로 만든다.
그리고 num in map(int, inpu().split())에서 num은 0과 1, 2 가리킬 수 있게 되고,
for num in map(int, input().split())에서 for 문을 통해 num은 차례대로 0, 1, 2 값을 가지게 된다.
[num for num in map(Iint, input().split())]에서 num 그대로 리턴하고, 이 리턴 된 값은 [ ]에 의해 list 안에 들어간다.
그리고 이 과정은 for y in range(숫자)를 통해 숫자 만큼 반복한다.

뒤 for 반복문 generator에 의해 수행될 되는 것은 [num for num in map(int, input().split())]이다. 

반응형

[num for num in input().split()]의 값이 [9, 1] 이라는 것을 구한다.

[num for num in map(int, input().split())]의 값인 [9, 1]을 [ ]를 통해 list로 넣는다.

수행을 했으니 y는 다음 값으로 넘어간다.

[num for num in input().split()]의 값이 [5] 이라는 것을 구한다.

[num for num in map(int, input().split())]의 값인 [5]을 [ ]를 통해 list로 넣는다.
이러한 과정을 통해 [[9, 1], [5]] 라는 2차원 list가 생성된다.

728x90

3)int( ) 형 변환을 활용하여 여러 줄에 걸쳐 숫자(들)을 받을 떄,

[[int(num) for num in input().split())] for y in range(num<-숫자 혹은 int 타입 변수)]

for y in range(num) 이부분은 다른 것과 동일하니 [int(num) for num in input().split()] 이 부분만 그림으로 표현해 보려고 한다.

이렇게 리스트를 구하게 되고, 뒤에 for y in range(num) 에 의해 반복되면서 2차원 리스트를 만들 수 있다.
이것을 보면, [int(num) for num input().split()] 은 앞서 1차원 리스트에서 했던 list(map(int, input().split())와 동일하다.

2차원 리스트를 다루면서, 문자에서나 숫자에서나 앞 부분을 주로 설명을 했는데, 이것은 generator 설명이 앞부분으로 하는 것이 더 좋기 때문에 그랬을 뿐, 핵심은 뒤에 for y in range(num)부분이다. 

[리스트 생성] for 몇번 수행할지.

즉 앞에는 리스트를 생성할 수 있는 어떠한 문구가 오면되고, 뒤 for 문을 통해 몇번 수행하면 될지만 정하면 된다.
앞이라고 해서 꼭 1차원 리스트가 올 필요는 없다. 2차원 리스트가 오면 2차원 리스트가 포함되어 있는 3차원 리스트가 생성되는 것이고 3차원 리스트가 앞에서 수행되면 뒤 for문으로 인해 4차원 리스타가 생성되는 것이다.

 

728x90
반응형

+ Recent posts