TIL07. Advanced Python

박경철·2021년 5월 17일
0

TIL

목록 보기
7/19

1. List comprehensions

List Comprehension이란 새로운 리스트를 만들 때 사용할 수 있는 간단한 표현식으로 리스트와 마찬가지로 대괄호 [,]를 사용합니다.
For 문 뒤에 if문을 추가하여 조건문을 포함한 형식도 올 수 있습니다.
[표현식 for 원소 in 반복 가능한 객체][표현식 for 원소 in 반복 가능한 객체 if문]

new_list = [ x for x in range(1, 11) ]
print(new_list)

1부터 10까지를 가지는 리스트를 만들 때 List Comprehension으로 생성할 수 있습니다.

for loof 사용

odd_numbers = [ ]
for element in range(1,11):
    if (element % 2) == 1:
        odd_numbers.append(element)
        
List Comprehension 사용

list_comprehension = [ element for element in range(1,11) if (element % 2) == 1 ]
print(list_comprehension)

이처럼 For 루프 내부에서 새로운 리스트를 만드는 For 루프는 List Comprehension으로 변환할 수 있다.
코드를 한줄에 간결함이 높아져 실제 For Loof 구문보다 훨씬 빠른 처리속도를 낼 수 있다.

장점 : 깔끔하고 간결하게 List, Dictionary를 만들 때 용이하다.
단점 : 복잡한 Comprehension은 분석하기 어렵다.

2. Iterators

Iterator는 값을 순차적으로 꺼내올 수 있는 객체입니다.

L = []
print(dir(L))

'__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

L 리스트가 반복 가능한 객체인지 확인하는 방법은 dir()을 호출하여 __iter__(), __next__() 함수가 있는지 확인할 수 있습니다.

L = [1,2,3]

iterator_L = L.__iter__()
print(iterator_L.__next__())
print(iterator_L.__next__())
print(iterator_L.__next__())
print(iterator_L.__next__())

L 리스트에 있는 1,2,3을 차례대로 출력되고 StopIteration이 발생하게 됩니다. 리스트의 인덱스를 벗어나서 가져올 데이터가 없을 경우 StopIteration이 발생하는것을 알 수 있십니다.

D = {"a" : 1, "b" : 2, "c" : 3}

I = iter(D.keys())

while True :
    try :
        X = next(I)
    except StopIteration :
        break
        
	print(X)
    

Dictionary도 반복 가능한 객체이므로 리스트와 같이 __iter__ 함수와 __next__ 함수를 사용할 수 있고 파이썬 기본함수인 iter(),next() 또한 사용할 수 있습니다.

profile
안녕하세요!

0개의 댓글