all(iterable)
iterable 안의 모든 요소가 True이면 True를 반환하고, 하나라도 False이면 False를 반환하는 내장 함수.
예제:
print(all([True, True, True])) # True
print(all([True, False, True])) # False
print(all([])) # 빈 iterable은 기본적으로 True
리스트(list)의 내장 메서드로, 특정 값이 리스트에서 몇 번 등장하는지 반환함.
예제:
nums = [1, 2, 2, 3, 3, 3]
print(nums.count(2)) # 2
print(nums.count(3)) # 3
print(nums.count(4)) # 0
from collections import Counter
Counter는 리스트의 각 원소 개수를 더 효율적으로 세는 dict 형태의 자료구조.
.count(num)는 리스트 전체를 한 번 순회하며 num을 찾지만, Counter는 한 번만 전체 순회한 뒤 각 요소의 빈도를 저장하므로 더 효율적임.
예제 비교
.count()
nums = [1, 2, 2, 3, 3, 3]
print(nums.count(2)) # 2
print(nums.count(3)) # 3
nums.count(2)를 실행하면 nums를 처음부터 끝까지 돌면서 2의 개수를 세고,
nums.count(3)를 실행하면 또 다시 처음부터 끝까지 돌면서 3의 개수를 셈. (비효율적)
Counter
from collections import Counter
nums = [1, 2, 2, 3, 3, 3]
counter = Counter(nums)
print(counter[2]) # 2
print(counter[3]) # 3
Counter(nums)는 한 번만 리스트를 순회하여 각 숫자의 개수를 저장한 후, O(1) 시간에 counter[2]나 counter[3]을 가져올 수 있음.
all(nums.count(num) % 2 == 0 for num in set(nums))
set(nums): 중복을 제거한 nums의 고유 원소 집합.
nums.count(num): num이 리스트에서 몇 번 등장하는지 반환.
nums.count(num) % 2 == 0: num의 개수가 짝수인지 확인.
all(...): 모든 숫자가 짝수 개수로 존재하면 True, 하나라도 홀수 개수면 False.
예제:
nums = [1, 2, 2, 3, 3, 3]
print(all(nums.count(num) % 2 == 0 for num in set(nums))) # False (3이 홀수 개)
nums = [1, 1, 2, 2, 3, 3, 3, 3]
print(all(nums.count(num) % 2 == 0 for num in set(nums))) # True (모든 숫자가 짝수 개)
from collections import Counter
nums = [1, 2, 2, 3, 3, 3]
counter = Counter(nums)
print(all(count % 2 == 0 for count in counter.values())) # False
Counter(nums).values()는 모든 숫자의 개수를 리스트로 반환하므로 nums.count(num)을 여러 번 호출하는 비효율성을 없앨 수 있음.
set(nums)를 만들 필요 없이 바로 카운팅 가능.
.count(num)은 리스트를 매번 순회하므로 비효율적.
Counter를 사용하면 한 번만 순회 후 O(1) 조회 가능 → 성능 개선됨.