39-3강부터 이터레이터에 __getitem__ 메서드가 같이 나오는데,
심사문제 포함 모든 __getitem__메서드가
return값에 index가 영향을 미치도록 되어 있더라구요.
ex)
def __getitem__(self, index): if index < self.stop: return index else: raise IndexError
*밑에는 심사문제입니당
def __getitem__(self, index):
if index < self.stop - self.start:
time = self.start + index
근데 생각해보면 지금까지 배운 리스트나 , 튜플이나 등등 모든 반복가능한 객체는 index에 맞춰서(논리적인 순서대로) 요소들을 설정하진 않았잖아요..?
ex) a = [11,222,41,699]
a와 같은 리스트는 논리적인 순서가 없음.
11-3 강에서 보듯
시퀀스객체.__getitem__(인덱스)
>>> a = [38, 21, 53, 62, 19] >>> a.__getitem__(1) 21
어떻게 return값을 설정한건지 궁금합니다..
....
아무리 고민해봐도 안되더라구요.
질문이 너무 이해하기 힘들게 쓴거 같네요
아, 그리고 이터레이터 모든 __getitem__예제들에서
print(Counter(3)[1.22])
와같이 float도 인덱스로 가능하던데 이걸 해결하려구
def __getitem__(self, index):# 인덱스를 받음하니까 뭔가 값이 이상하더라구요..
if index != int():
raise IndexError
elif index < self.stop:# 인덱스가 반복을 끝낼 숫자보다 작을 때
return index * 10# 인덱스를 반환
else: # 인덱스가 반복을 끝낼 숫자보다 크거나 같을 때
raise IndexError# 예외 발생
print(Counter(3)[0], Counter(3)[1], Counter(3)[2])
어떻게 설정하면 될까요??
ㅠㅠ 머리아프네용
a = [38, 21, 53, 62, 19]리스트가 이렇게 있다면 인덱스는
0, 1, 2, 3, 4가 됩니다.
a[0]는 38이고, a[1]은 21입니다.
논리적인 순서가 무슨 뜻인지는 모르겠지만, 정렬된 상태를 뜻한다면 그것과는 아무 상관이 없습니다.
그건 리스크를 정렬해서 얻을 수 있는 결과입니다. 정렬하면
[19, 21, 32, 53, 62]
이렇게 됩니다.
sort 함수는 알고 있겠지요?
정렬한 이후에는 a[0]는 19, a[1]은 21입니다.
파이썬의 리스크는 인덱스 -> 값으로 연결되어 있습니다.
평소에는 값만 출력되지만, 순서대로 접근하거나 원하는 요소에 접근할 때는 인덱스를 사용합니다. a[3]처럼 말이죠.
파이썬에서 대다수 객체는 반복 가능한(iterable) 객체입니다. 반복 가능한 객체에 대해 공통으로 사용할 수 있는 기능들이 제공됩니다. for가 대표적이죠.
내가 만든 자료 구조는 처음부터 정렬 가능한 상태를 유지하고 싶다면 그런 형태의 자료 구조를 만들면 됩니다. SortedList 클래스를 만들고, 이터레이터를 구현해주면 됩니다. 그러면 항상 내부에 값은 정렬된 상태를 유지하게 만들 수 있습니다.
이러한 형태의 클래스 구현은 검색하면 많이 있습니다.
http://www.grantjenks.com/docs/sortedcontainers/_modules/sortedcontainers/sortedlist.html#SortedList
자료구조와 알고리즘 쪽으로 공부하시면 더 깊이 있는 설명이 있고, 직접 코드로 많이 구현해보게 될 겁니다.