파이썬 팁 - iterable 객체에서 찾기

framewolf·2023년 5월 28일
0

파이썬 팁

목록 보기
3/3

1. 존재 유무 확인 - for문, in 연산자, any()

리스트나 튜플 안에 해당하는 값이 존재하는지 알아보고 싶은 경우, for문을 쓰거나 in 연산자를 사용해도 좋지만, any()나 all()을 이용해도 된다.

any()와 all()은 iterable 객체(맴버들을 한번에 하나씩 돌려줄 수 있는 객체: list, tuple, str, dict, set, file)를 받는다. any()는 맴버 중 하나라도 True면 True를 반환하고, all()은 맴버가 모두 True일 때만 True를 반환한다.

# list안에 value가 있는지 조사
-----------------------
# for문
for m in list:
	if(m==value):
    	...
        
# in 연산자
if(value in m):
	...
    
# any()함수
if(any(m==value for m in list)):
	...
  • any() 함수에서 m==value대신 그냥 value를 넣어 버리면 0(False)와 0이 아님(True)로만 구분하므로 주의하자.

any()와 all()함수는 m==value 자리에 다양한 bool반환 연산자를 넣어 유용하게 사용할 수 있다.

# 리스트 안에 value보다 큰 값이 있는지 확인
if(any(m>value for m in list)):
# 리스트 안의 값이 모두 value보다 큰 지 확인
if(all(m>value for m in list)):
# 이중리스트 안의 두번째 요소가 value과 같은 것이 있는지 확인
if(any(t[1]==value for t in list)):

2. 위치 찾기

단순한 존재 유무 확인보다 해당 맴버의 위치(index)를 찾고 싶은 경우도 있다.

  • 리스트의 경우)
    리스트 내장함수 list.index(value)를 사용할 수 있다. 이 함수는 list에 value가 존재하면 그 값이 나타나는 첫번째 index를 반환하고, 없다면 runtime error를 발생시킨다.

  • 문자열의 경우)
    String 내장함수 string.find(substring, start, end)를 사용할 수 있다. 이 함수는 string 안의 start, end 범위 사이에서 substring의 위치를 반환한다. 값이 존재하지 않는다면 -1을 반환한다. start,end의 기본 값은 문자열의 시작과 끝이다.

# for문
for k in range(len(list)):
	if(list[k]==value):
    	...
        
# 리스트 내장함수 index()
i = list.index(value)

i==value의 index if value가 존재할 때
runtime error if value가 존재하지 않을 때

# String 내장함수 find()
i = string.find(substring)

i==substring의 시작 위치 if substring이 존재할 때
i==-1 if substring이 존재하지 않을 때
  • value가 없을 시 index()는 runtime error가 발생하므로 함수 호출 전에 유무를 확인하거나 예외처리를 해줘야 한다.

3. enumerate()

enumerate(iterable, startIndex)는 파이썬 내장함수로, iterable 객체의 요소와 index를 튜플로 묶은 리스트를 반환하는 함수이다. startIndex로 첫 요소의 index를 지정할 수 있으며 기본값은 0이다.

a = ['a','b','c','d']	#a는 다른 iterable 객체도 될 수 있다.
b = enumerate(a)
b=[(0,'a'),(1,'b'),(2,'c'),(3,'d')]

한 리스트에서 값을 찾는 것을 여러번 반복해야할 때에, list.index(value)를 여러번 사용하는 것 보다 enumerate()를 이용해서 한꺼번에 가져오는 것이 더 시간적으로 효율적일 수 있다.

0개의 댓글