파트 4. Iterable 다루기

신예진·2023년 7월 17일
0
<참고>
원본의 순서는 변경하지 않고, 정렬된 값을 구하려면? sort 함수 가능!
list1 = [3, 2, 5, 1]
list2 = [i for i in list1] # 또는 copy.deepcopy를 사용
list2.sort()

list1 = [3, 2, 5, 1]
list2 = sorted(list1)

1) 2차원 리스트 뒤집기
다음을 만족하는 함수, solution을 완성해주세요.

  • solution 함수는 이차원 리스트, mylist를 인자로 받습니다
  • solution 함수는 mylist 원소의 행과 열을 뒤집은 한 값을 리턴해야합니다.
    예를 들어 mylist [[1, 2, 3], [4, 5, 6], [7, 8, 9]]가 주어진 경우, solution 함수는 [[1, 4, 7], [2, 5, 8], [3, 6, 9]] 을 리턴하면 됩니다.
def solution(mylist):
	answer = list(map(list,zip(*mylist)))
    return answer

zip을 이용하라!

<예시 #1>
list1 = [1,2,3,4]
list2 = [10,20,30,40]
list3 = [5,6,7,8]
answer = []
for num1, num2, num3 in zip(list1,list2,list3):
	print(num1+num2+num3)
<예시 #2>
animals = ['cat','dog','lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals,sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

2) i번째 원소와 i+1번째 원소 - zip
보통은 len과 index를 이용해 각 원소에 접근한다.
하지만 zip을 이용하면 index를 사용하지 않고 각 원소에 접근할 수 있다.

def solution(mylist):
    answer = []
    for i in range(len(mylist)-1):
        answer.append(abs(mylist[i] - mylist[i+1]))
    return answer

if __name__ == '__main__':
    mylist = [83, 48, 13, 4, 71, 11]    
    print(solution(mylist))

대신

def solution(mylist):
    answer = []
    for number1, number2 in zip(mylist, mylist[1:]):
        answer.append(abs(number1 - number2))
    return answer

if __name__ == '__main__':
    mylist = [83, 48, 13, 4, 71, 11]    
    print(solution(mylist))

3) 모든 멤버의 type 변환하기 - map
보통 for문을 이용해 원소의 타입을 하나씩 바꾼다.

list1 = ['1', '100', '33']
list2 = []
for value in list1:
    list2.append(int(value))

대신 map을 이용하면 for문을 사용하지 않고도 일괄 변환할 수 있다.

list1 = ['1', '100', '33']
list2 = list(map(int, list1))

응용 예시

def solution(mylist):
	answer = list(map(len,mylist))
    return answer

0개의 댓글