[Python] 파이썬 시퀀스#1

아직·2022년 6월 8일
0
post-thumbnail

1)

code_list3 = [ord(s) for s in chars if ord(s) > 40]
code_list4 = list(filter(lambda x : x > 40, map(ord, chars)))

chars = '+-@#!@*$!)' 에 대해서 둘은 같은 형태의 리스트를 생성한다.

filter(함수, 리스트)
map(함수, 순회 가능한 객체)
lambda(매개 변수: 표현식)

2)

tuple_g = [ord(s) for s in chars]
tuple_ge = (ord(s) for s in chars)
print(tuple_g) #리스트 반환
print(next(tuple_ge)) #43 반환
print(next(tuple_ge)) #45 반환

Generator는 작은 데이터 조각으로도 연속되는 데이터를 만들어낼 수 있다.
생성할 값의 '위치 정보'만 갖고 한 번에 하나의 항목만 생성하며 나아가기 때문에 효율적인 메모리 사용에 유용하다.

어떤 데이터 타입이 dir()확인 결과 __itr__를 attribute로 갖는다면, 해당 데이터 타입은 for x in y 형태로 순회가 가능함을 의미한다.

3)

#네임드 튜플 사용
Classes = namedtuple('Classes', ['rank', 'number'])
students2 = [Classes(rank, number)
            for rank in 'A B C D'.split()
            for number in [str(n) for n in range(1, 21)]
            ]
#제너레이터 사용
for s in ('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1,21))

둘의 결과값은 비슷하다.

4)
Input

marks = [['~'] * 5, [1,2,3]*2]

Output

[['~', '~', '~', '~', '~'], [1, 2, 3, 1, 2, 3]]

['~']가 다섯 번 반복되는 것이 아님에 주의하자

5)

marks1 = [['~'] * 3 for _ in range(4)]
marks2 = [['~'] * 3] * 4

marks1은 서로 다른 원소들인 반면에 marks2는 같은 원소의 반복이므로 수정 시 주의할 필요가 있다.

6)

print('sorted-', sorted(f_list, key=len))
print('sort-', f_list.sort(), f_list)

sorted는 시퀀스를 함수 속의 대상으로 받으며 "~옷 입으면 어떨지 새로운 객체로 보여줄게"의 느낌이라면, sort는 묵직하게 시퀀스를 직접 호출해서 원본을 바꿔버린다. 이 때 반환 값은 None이다.

0개의 댓글