# 입력
123456
a = list(input())
# 출력
['1', '2', '3', '4', '5', '6']
# 입력
123456
# 1. str로 input -> for문으로 원소 하나씩 int 변환
b = list(int(x) for x in input())
# 2. str로 input -> lambda로 원소 하나씩 int 변환
a = list(map(lambda x: int(x), input()))
# 출력
[1, 2, 3, 4, 5, 6]
: 두 방법 다 시간은 비슷
n, m = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(n)]
: N x M 행렬을 바로 입력하기
: 입력이 1 2 3 이런식으로 띄어쓰기가 있을 때
n, m = map(int, input().split())
graph = [list(map(int, input())) for _ in range(n)]
print(graph)
: 입력이 123 이런식으로 띄어쓰기 없을 때
a_list[a:b:c]
: a부터 b까지 c 간격으로.
A = [0, 1, 2, 3, 4]
A[::-1] #처음부터 끝까지 -1칸 간격으로(즉, 역순으로)
A[1::2] #1부터 끝까지 2칸 간격으로
[4, 3, 2, 1, 0]
[1, 3]
#입력
2
123 456 789
abc def ghi
n = int(input())
result_1 = list(input()[::-1].split() for _ in range(n))
result_2 = list(input().split()[::-1] for _ in range(n))
result_3 = list(input()[::-1].split()[::-1] for _ in range(n))
result_4 = list(input()[::-1].split() for _ in range(n))[::-1]
print(result_1, result_2, result_3, result_4, sep = '\n')
#출력
#1: 행: 그대로, 열: 거꾸로, 문자열: 거꾸로 출력
#input 전체를 뒤집은 후, 띄어쓰기로 split
[['987', '654', '321'], ['ihg', 'fed', 'cba']]
#2: 행: 그대로, 열: 거꾸로, 문자열: 그대로 출력
#split 띄어쓰기 구분자로 거꾸로 해서, 열만 거꾸로 된듯
[['789', '456', '123'], ['ghi', 'def', 'abc']]
#3: 행: 그대로, 열: 그대로, 문자열: 거꾸로 출력
#input시 열/문자열 거꾸로 된 것을 split시 열을 거꾸로
#결국 열 거꾸로 -> 다시 원래 열로
[['321', '654', '987'], ['cba', 'fed', 'ihg']]
#4: 행: 거꾸로, 열: 거꾸로, 문자열: 거꾸로
#전부 거꾸로!
[['ihg', 'fed', 'cba'], ['987', '654', '321']]
: 정리하면..
0도 | 90도 | 180도 | 270도 |
---|---|---|---|
123 456 789 | abc 123 | ghi def abc | 789 ghi |
abc def ghi | def 456 | 789 456 123 | 456 def |
ghi 789 | 123 abc |
0도
: arr = [['1,2,3', '4,5,6', '7,8,9'], ['a,b,c', 'd,e,f', 'g,h,i']]
90도
: result_4 = list(map(list, zip(*reversed(arr))))
: [['a,b,c', '1,2,3'], ['d,e,f', '4,5,6'], ['g,h,i', '7,8,9']]
180도
: result_4 = list(map(lambda x: list(reversed(x)), reversed(arr)))
: [['g,h,i', 'd,e,f', 'a,b,c'], ['7,8,9', '4,5,6', '1,2,3']]
270도(=왼쪽으로 90도)
: result_4 = list(reversed(list(map(list, zip(*arr)))))
: [['7,8,9', 'g,h,i'], ['4,5,6', 'd,e,f'], ['1,2,3', 'a,b,c']]
# 입력
arr = [[1, 2, 3], [4, 5, 6]]
result_1 = list(map(lambda x: x.reverse(), arr.reverse()))
result_2 = list(map(lambda x: x.reverse(), reversed(arr)))
result_3 = list(map(lambda x: reversed(x), reversed(arr)))
result_4 = list(map(lambda x: list(reversed(x)), reversed(arr)))
# 출력
# 1. reverse 둘다
TypeError: 'NoneType' object is not iterable
# 2. reversed 한 다음 reverse
[None, None]
# 3. reversed만
[<list_reverseiterator object at 0x7f673270b7b8>, <list_reverseiterator object at 0x7f673a1f4e48>]
# 4. reversed 한 후에 list 씌움
[[6, 5, 4], [3, 2, 1]]
# 입력
arr = [['1,2,3', '4,5,6', '7,8,9'], ['a,b,c', 'd,e,f', 'g,h,i']]
result = list(map(list, zip(*arr)))
print(result)
# 출력
[['1,2,3', 'a,b,c'], ['4,5,6', 'd,e,f'], ['7,8,9', 'g,h,i']]
# 입력
arr = [['1,2,3', '4,5,6', '7,8,9'], ['a,b,c', 'd,e,f', 'g,h,i']]
result = list(map(lambda x: list(reversed(x)), arr))
print(result)
# 출력: 행은 reversed 안하고, 각 행 안의 원소(즉 열)만 reversed 함
[['7,8,9', '4,5,6', '1,2,3'], ['g,h,i', 'd,e,f', 'a,b,c']]
# 입력
arr = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
result= list(map(lambda x: x[1:4], arr))
print(result)
# 출력
[[2, 3, 4], [7, 8, 9]]
# 입력
# 2행 x 3열 list
arr = [['1,2,3', '4,5,6', '7,8,9'], ['a,b,c', 'd,e,f', 'g,h,i']]
result_1 = zip(*reversed(arr))
result_2 = list(zip(reversed(arr)))
result_3 = list(zip(*reversed(arr)))
result_4 = list(map(list, zip(*reversed(arr))))
print(result_1, result_2, result_3, sep = '\n')
# 출력
# 1: zip instance
<zip object at 0x7f5b8a6d5cc8>
# 2: 2행 x 3열.
[(['a,b,c', 'd,e,f', 'g,h,i'],), (['1,2,3', '4,5,6', '7,8,9'],)]
# 3: 3행 x 2열 list(tuple)로 변환
# 하나의 list로 묶여 있던거를 풀어야만 zip으로 제대로 다시 묶을 수 있음
[('a,b,c', '1,2,3'), ('d,e,f', '4,5,6'), ('g,h,i', '7,8,9')]
# 4: 3행 x 2열 list(list)로 변환
[['a,b,c', '1,2,3'], ['d,e,f', '4,5,6'], ['g,h,i', '7,8,9']]
행렬을 90도 회전하고 싶으면
: result_4 = list(map
(list, zip
(*
reversed(arr))))
zip(): 각 행의 동일 열의 원소를 묶어줌
-> 우선 뒤집어줌: reversed
-> 근데 원 list가 list로 묶여있으므로, 이를 풀어줘야함: *
-> 근데 zip()은 튜플로 나타냄
-> map()을 이용해서 zip() 할때마다 각 원소를 list()로 변환하게끔 해야함
# 입력
arr = [[1, 2, 3], [4, 5, 6]]
result_1 = map(lambda x: reversed(x), reversed(arr))
result_2 = list(map(lambda x: reversed(x), reversed(arr)))
result_3 = map(lambda x: list(reversed(x)), reversed(arr))
result_4 = list(map(lambda x: list(reversed(x)), reversed(arr)))
print(result_1, result_2, result_3, result_4, sep = '\n')
# 출력
# 1: map instance
<map object at 0x7f393f481898>
# 2: reversed(): list_reverseiterator instance를 반환
[<list_reverseiterator object at 0x7f39470d2cc0>, <list_reverseiterator object at 0x7f39470d2f98>]
# 3: map instance
<map object at 0x7f3947152a90>
# 4: 행: 거꾸로, 열: 거꾸로, 문자열: 그대로 출력
[['g,h,i', 'd,e,f', 'a,b,c'], ['7,8,9', '4,5,6', '1,2,3']]
list
(map(lambda x: list
(reversed(x)), reversed(arr)))1) 비효율적인 방법
: 90도 회전한 것을 다시 180도 회전하거나,
아니면 180도 회전한 것을 추가로 90도 더 회전하면 됨
2) 0도에서 바로 270도로 회전
# 입력
result_1 = list(map(lambda e:list(reversed(e)), reversed(list(zip(*reversed(arr))))))
result_2 = list(zip(*reversed(list(map(lambda e:list(reversed(e)), reversed(arr))))))
result_3 = reversed(list(map(list, zip(*arr))))
result_4 = list(reversed(list(map(list, zip(*arr)))))
print(result_1, result_2, result_3, result_4, sep = '\n')
# 출력
# 1: 90도 회전 후 180도 회전 -> 잘 나옴
[['7,8,9', 'g,h,i'], ['4,5,6', 'd,e,f'], ['1,2,3', 'a,b,c']]
# 2: 180도 회전 후 90도 회전 -> 원소가 튜플로 나옴.. 왜..?
[('7,8,9', 'g,h,i'), ('4,5,6', 'd,e,f'), ('1,2,3', 'a,b,c')]
# 3: list_reverseiterator instance
<list_reverseiterator object at 0x7f5b6bd7e7b8>
# 4:
[['7,8,9', 'g,h,i'], ['4,5,6', 'd,e,f'], ['1,2,3', 'a,b,c']]
행렬을 270도 회전하려면
: result_4 = list(reversed
(list(map
(list, zip
(*arr)))))
zip으로 묶어서 -> map을 이용하여 tuple인 원소를 list로 변환 -> list 씌우고 -> reversed로 뒤집음
비효율적인 방법 보다는 바로 270도로 변환하자!