Iterable이란? 자신의 멤버를 한번에 리턴할 수 있는 객체 (예: 딕셔너리, 리스트, string, 튜플)
3-1. 원본을 유지한채, 정렬된 리스트 구하기 - sorted
- sort() 함수 사용시 리스트의 원소 정렬 가능 - 원본의 순서 자체를 변경
- sorted - 원본의 순서는 변경하지 않고 정렬된 값 구하기
list = [1,2,3,4]
list.sort() # 원본 정렬 순서 변경됨
new_list = sorted(list) # 원본 정렬 순서 변경 안됨
3-2. 2차원 리스트 뒤집기
- list 원소의 행과 열을 뒤집은 한 값 리턴함.
- [[1, 2, 3], [4, 5, 6], [7, 8, 9]] → [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
- map: 리스트의 요소를 지정된 함수로 처리하는 함수
- unpacking: 여러개의 매개변수를 포함하는 하나의 객체를 여러 개로 풀어주는 방법 (인수 앞 위치)
- packing: 여러개의 매개변수를 하나의 매개변수로 만들어서 사용 (매개변수 앞 위치)
for i in range(len(lst)):
lst[i] = int(lst[i])
lst = list(map(int, lst))
def solution(mylist):
answer = list(map(list, zip(*mylist)))
return answer
3-3. 2차원 리스트 뒤집기 - zip
- zip = 각 iterable의 요소를 모으는 iterator를 생성함.
1. 여러 개의 iterable을 동시에 순회하는 경우
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
# zip 사용 X
for number1, number2, number3 in zip(list1, list2, list3):
print(number1 + number2 + number3)
# zip 사용
answer = list(map(sum, zip(list1, list2, list3)))
2. key 리스트와 value 리스트로 딕셔너리를 생성하는 경우
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds))
# {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
3-4. i번째 원소와 i+1번째 원소
- 리스트의 i번째 원소와 i+1번째 원소의 차를 담은 리스트 반환
- 마지막에 있는 원소는 차를 구할 수 없으니 구하지 않음.
- 원본 mylist의 길이 = n, ouptut = n-1
def solution(mylist):
answer = []
for i in range(len(mylist)-1):
answer.append(abs(mylist[i] - mylist[i+1]))
return answer
3-5. i번째 원소와 i+1번째 원소 - zip
- zip 사용시 index를 사용하지 않고 각 원소에 접근할 수 있음.
def solution(mylist):
answer = []
for num1, num2 in zip(mylist, mylist[1:]):
answer.append(abs(num1 - num2))
return answer
- 서로 길이가 다른 리스트가 인자로 들어오면 (mylist, mylist[1:]) 길이가 짧은 쪽까지만 iteration만 이루어짐. 길이가 짧은 쪽까지만 iterate하기 떄문에 제일 마지막 원소에 대해서는 차를 구하지 않음.
3-6. 모든 멤버의 type 변환하기
- 입력받은 리스트를 정수형 리스트로 바꾼 값을 리턴함. (['1', '100', '33'] → [1, 100, 33])
def solution(mylist):
answer = []
for value in mylist:
answer.append(int(value))
3-7. 모든 멤버의 type 변환하기 - map
- map 사용시 for 문을 사용하지 않더라도 일괄 변환 가능함.
- int로 변환하고 싶으므로 list(map(INT, LIST))
def solution(mylist):
answer = []
for value in mylist:
answer.append(int(value))
3-8. map 함수 응용하기
- 정수를 담은 2차원 list mylist → 각 원소의 길이를 담은 리스트 반환 ([[1, 2], [3, 4], [5]] → [2, 2, 1])
def solution(mylist):
answer = list(map(len, mylist))
return answer