[파이썬을 파이썬 답게] "Iterable 다루기"

[파이썬을 파이썬 답게] "Iterable 다루기"

원본을 유지한채, 정렬된 리스트 구하기

C 언어 or Java 스타일

list1 = [3, 2, 1] list2 = [i for i in list1] # 또는 copy.deepcopy를 사용 list2.sort()

파이썬 스타일

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

2차원 리스트 뒤집기

C 언어 or Java 스타일

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] new_list = [[], [], []] for i in range(len(mylist)): for j in range(len(mylist[i])): new_list[i].append(mylist[j][i]) print(new_list)

파이썬 스타일 1

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] new_list = list(map(list, zip(*mylist))) # 동작 설명 # * 연산자에 의해 mylist 리스트는 [1, 2, 3] [4, 5, 6] [7, 8, 9] 로 쪼개진다. # zip 객체에 의해 쪼개진 리스트별로 0 index 요소끼리, 1 index 요소끼리, 2 index 요소끼리 튜플형태로 저장된다. (1,4,7) (2,5,8) (3,6,9) # map 객체에 의해 각각의 튜플을 리스트로 변환한다. # list() 형변환을 통해 각각의 요소들을 저장하는 2차원 리스트로 변환한다.

i번째 원소와 i+1번째 원소

C 언어 or Java 스타일

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

파이썬 스타일

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

※ 주의

zip 함수에 서로 길이가 다른 리스트가 인자로 들어오는 경우에는 길이가 짧은 쪽 까지만 이터레이션이 이루어진다.

모든 멤버의 type 변환하기

C 언어 or Java 스타일

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

파이썬 스타일

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

map 함수 응용하기

이차원 리스트의 각 원소의 길이를 담은 리스트 반환하기

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

참고자료

https://programmers.co.kr/learn/courses/4008

from http://ikjo.tistory.com/30 by ccl(A) rewrite - 2021-11-05 04:02:14