본문 바로가기
요약정리/하우투파이썬

tuple: count(), index()

by JustDoIT 2020. 4. 4.

count()     index()


 

tuple 라이브러리의 메서드들

 

여기서는 tuple 라이브러리의 메서드들을 소개합니다. tuple에는 꼴랑 두 개의 메서드만 제공됩니다. 물론 __로 시작하는 조금 특별한 것들이 있기는 하지만 그들은 다른 글에서 다루겠습니다.

 

출처: 픽사베이

 

count()

count()str.count()와 기본적으로 같습니다. 한마디로, 지정된 값의 출현 횟수를 내주는 메서드입니다. 단, count()에는 슬라이스를 지정할 수 없습니다.

 

하지만 count()str.count()가 결정적으로 다른 것은 지금 바로 소개할 내용 때문입니다. 문자가 늘어선 문자열의 특성상 str.count()에는 부속 문자열substring을 지정할 수 있지만, count()에는 그런 구조를 적용할 수 없습니다. 튜플의 요소가 튜플이나 리스트인 경우에도 이를 탐색할 수 없습니다. 구체적인 예를 볼까요?

 

# tuple_count.py
tu = (1, 2, [1, 2], (1, 2), {1, 2}, {3:'hi', 4: 'hey'})
print(f"tu: '{tu}'")
print(f"len(tu): {len(tu)}")
print('-' * 10)
print(f"1. tu.count(1): {tu.count(1)}")
print(f"2. tu.count((1, 2)): {tu.count((1, 2))}")
print(f"3. tu.count(3): {tu.count(9)}")
print(f"4. tu.count('hi'): {tu.count('hi')}")


# result
tu: '(1, 2, [1, 2], (1, 2), {1, 2}, {3: 'hi', 4: 'hey'})'
len(tu): 6
----------
1. tu.count(1): 1
2. tu.count((1, 2)): 1
3. tu.count(3): 0
4. tu.count('hi'): 0

 

우선 tu는 여러 데이터 타입을 요소로 가지고 있습니다. 코드에 나타낸 것처럼 tu의 길이는 6입니다. 따라서 count()의 탐색 대상은 겉으로 보이는 6개뿐입니다. 3번과 4번의 결과가 0인 이유입니다.

 

 

index()

index()str.index()의 관계 또한 count() str.count()의 관계와 같습니다. 물론 index()는 지정된 값의 첫 번째 인덱스를 내주는 메서드입니다. 그런데 한 가지 조심(?)해야 할 내용이 있습니다. 내주는 인덱스가 9223372036854775807 미만이어야 합니다. 하지만 이보다 긴 튜플 자체를 탐색하지 못한다는 것인지, 아니면 단지 내주는 인덱스가 이보다 작아야 한다는 것인지 저로서는 알 수 없습니다. 테스트할 현실적인 필요성을 못 느껴서요.

f# tuple_index.py
tu = (1, 2, [1, 2], (1, 2), {1, 2}, {3:'hi', 4: 'hey'})
print(f"tu: {tu}")
print(f"len(tu): {len(tu)}")
print('-' * 10)
print(f"1. tu.index(1): {tu.index(1)}")
print(f"2. tu.index((1, 2)): {tu.index((1, 2))}")
print(f"3. tu.index('hi'): {tu.index('hi')}"))


# result
tu: (1, 2, [1, 2], (1, 2), {1, 2}, {3: 'hi', 4: 'hey'})
len(tu): 6
----------
1. tu.index(1): 0
2. tu.index((1, 2)): 3
...
ValueError: tuple.index(x): x not in tuple

 

결과는 모두 직관적이죠? 지정된 요소를 찾지 못하면 오류와 마주해야 하므로 try ... except 구문을 적용해 코딩하는 것이 좋을 듯합니다.

 

여기까지입니다. 읽어 주셔서 고맙습니다.

 

Today is mutant yesterdays.
영리 목적으로는 저자의 허락 없이 편집, 배포하실 수 없습니다.
Authored by justdoit709@gmail.com

댓글