파이썬의 sort()
함수를 이용하면 리스트의 원소를 정렬할 수 있지만, 이 때 sort()
함수는 원본의 멤버 순서를 변경한다.
sorted()
함수를 사용하면 원본의 순서는 변경하지 않고 정렬된 값을 구할 수 있다.
list1 = [3, 2, 1]
## 1. deep copy와 sort()함수를 이용하여 순서를 변경
list2 = [i for i in list1] # 또는 copy.deepcopy를 사용
list2.sort()
## 2. sorted()함수를 이용하여 순서를 변경
list3 = sorted(list1)
문제 설명
다음을 만족하는 함수, solution을 완성해주세요.
- solution 함수는 이차원 리스트,
mylist
를 인자로 받습니다- solution 함수는
mylist
원소의 행과 열을 뒤집은 한 값을 리턴해야합니다.
제한 조건mylist
의 원소의 길이는 모두 같습니다.mylist
의 길이는mylist[0]
의 길이와 같습니다.- 각 리스트의 길이는 100 이하인 자연수입니다.
입출력 예
mylist output [[1, 2, 3], [4, 5, 6], [7, 8, 9]] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
answer = []
for i in range(0, len(mylist)):
tmp = []
for j in range(0, len(mylist)):
tmp.append(mylist[j][i])
answer.append(tmp)
return answer
파이썬의 zip()
함수와 unpacking을 이용하여 리스트를 뒤집을 수 있다.
new_list = list(map(list, zip(*mylist)))
Zip 함수
zip(*iterables)
zip(*iterables)
는 각 iterables의 요소들을 모으는 iterator를 만듦
튜플의 iterator를 돌려주는데, i 번째 튜플은 각 인자로 전달된 sequence나 iterable의 i 번째 요소를 포함mylist = [1, 2, 3] new_list = [40, 50, 60] for i in zip(mylist, new_list): print (i) #출력 결과 (1, 40) (2, 50) (3, 60)
예제 1 - 여러 개의 Iterable 동시에 순회list1 = [1, 2, 3, 4] list2 = [100, 120, 30, 300] list3 = [392, 2, 33, 1] for number1, number2, number3 in zip(list1, list2, list3): print(number1 + number2 + number3) #출력 결과 493 # 1+100+392 124 # 2+120+2 66 # 3+30+33 305 # 4+300+1
예제 2 - Key 리스트와 Value 리스트로 딕셔너리 생성하기
animals = ['cat', 'dog', 'lion'] sounds = ['meow', 'woof', 'roar'] answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
✔ zip 함수에 서로 길이가 다른 리스트가 인자로 들어오는 경우에는 길이가 짧은 쪽 까지만 이터레이션이 이루어짐
문제 설명
숫자를 담은 리스트mylist
가 solution 함수의 파라미터로 주어집니다. solution 함수가mylist
의i
번째 원소와i+1
번째 원소의 차를 담은 일차원 리스트에 차례로 담아 리턴하도록 코드를 작성해주세요.
단, 마지막에 있는 원소는(마지막+1)
번째의 원소와의 차를 구할 수 없으니, 이 값은 구하지 않습니다.
제한 조건
mylist
의 길이는 1 이상 100 이하인 자연수입니다.mylist
의 원소는 1 이상 100 이하인 자연수입니다.
입출력 예
mylist output [83, 48, 13, 4, 71, 11] [35, 35, 9, 67, 60] - 83과 48의 차는 35입니다. - 48과 13의 차는 35입니다. - 13과 4의 차는 9입니다. - 4와 71의 차는 67입니다. - 71과 11의 차는 60입니다. 따라서 [35, 35, 9, 67, 60]를 리턴합니다.
answer = []
for i in range(0, len(mylist)-1):
answer.append(abs(mylist[i] - mylist[i+1]))
return answer
파이썬의 zip()
함수를 이용하여 index를 사용하지 않고 각 원소에 접근할 수 있다.
answer = []
for number1, number2 in zip(mylist, mylist[1:]):
answer.append(abs(number1 - number2))
return answer
문제 설명
문자열 리스트mylist
를 입력받아, 이 리스트를 정수형 리스트로 바꾼 값을 리턴하는 함수, solution을 만들어주세요.
제한 조건
mylist
의 길이는 100 이하인 자연수입니다.mylist
의 원소는 10진수 숫자로 표현할 수 있는 문자열입니다. 즉, 'as2' 와 같은 문자열은 들어있지 않습니다.
입출력 예
mylist output ['1', '100', '33'] [1, 100, 33]
answer = []
for num in mylist:
answer.append(int(num))
return answer
파이썬의 map()
함수를 이용하여 멤버의 타입을 일괄 변환할 수 있다.
return list(map(int, mylist))
Map 함수
map(function, iterable, ...)
입력받은 자료형의 각 요소에 함수 f를 적용한 결과를 묶어서 리턴
문제 설명
정수를 담은 이차원 리스트,mylist
가 solution 함수의 파라미터로 주어집니다. solution 함수가mylist
각 원소의 길이를 담은 리스트를 리턴하도록 빈칸을 완성해보세요.
hint) 이전 강의에서 배운map
함수를 활용해보세요
제한 조건
mylist
의 길이는 100 이하인 자연수입니다.mylist
의 각 원소의 길이는 100 이하인 자연수입니다.
입출력 예
mylist output [[1], [2]] [1, 1] [[1, 2], [3, 4], [5]] [2, 2, 1]
answer = list(map(len, mylist))
return answer
Programmers - 파이썬을 파이썬답게 https://programmers.co.kr/learn/courses/4008