본문 바로가기
Python/파이썬 문법, 함수, 모듈 등

[Python] any() 함수와 시퀀스(Sequence)와 이터러블(Iterable)에 대한 설명, 리스트 컴프리헨션, 제너레이터 표현식 설명

by dong_su 2024. 5. 28.

any() 함수 설명과 예제

any() 함수는 파이썬 내장 함수 중 하나로, 인자로 반복 가능한(iterable) 객체를 받아 그 안에 있는 요소 중 하나라도 참이면 True를 반환하고, 모든 요소가 거짓일 경우에만 False를 반환합니다.

 

따라서 any() 함수는 주어진 조건을 만족하는 요소가 있는지 여부를 판단할 때 사용됩니다.

 

예제)

user_ids = ['user1', 'user2', 'user3']
partner_lst = [['user4', 'user5'], ['user6', 'user1'], ['user7', 'user8']]

# 파트너 리스트에 사용자 아이디가 있는지 확인
found = any(user_id in partner for partner in partner_lst for user_id in user_ids)
print(found)  # 출력: True

 

위 any() 함수를 사용하면 간결하고 직관적으로 표현할 수 있다. 만약 any()를 사용하지 않았다면

found = False
for partner in partner_lst:
    for user_id in user_ids:
        if user_id in partner:
            found = True
            break
    if found:
        break

위와 같은 코드로 짜야 동일한 동작을 한다.


시퀀스(Sequence)

시퀀스는 순서가 있고 반복 가능하며 반복된 값 포함 가능하며, 특정 순서로 정렬된 데이터의 집합을 나타냅니다.

각 요소는 정수 인덱스를 통해 접근할 수 있습니다. 여기에 더하여 시퀀스는 불변(immutable) 시퀀스와 가변(mutable) 시퀀스로 나눌 수 있습니다. 불변 시퀀스는 한 번 생성되면 변경할 수 없는 데이터 타입이며, 가변 시퀀스는 요소를 추가하거나 제거할 수 있습니다.

예를 들어, 리스트와 튜플은 가변과 불변의 시퀀스에 해당하며, 문자열과 바이트 배열은 불변의 시퀀스에 해당합니다.

 

이터러블(Iterable)

이터러블은 반복 가능한 객체를 나타내며, for 루프를 통해 반복할 수 있습니다.

또한 iter() 함수를 사용하여 이터레이터(iterator)를 생성할 수 있습니다. 모든 시퀀스는 이터러블이지만, 모든 이터러블이 시퀀스는 아닙니다. 딕셔너리는 이터러블이지만 시퀀스는 아닙니다. 이는 딕셔너리가 순서를 보장하지 않기 때문입니다.


리스트 컴프리헨션(List Comprehension)

리스트 컴프리헨션은 반복문을 사용하여 리스트를 생성하는 간결한 문법입니다.

리스트 컴프리헨션은 한 줄로 작성되며, for 루프와 조건문(if)을 포함할 수 있습니다.

# [표현식 for 항목 in 반복 가능한 객체 if 조건]

# 0부터 9까지의 제곱으로 이루어진 리스트 생성
squares = [x**2 for x in range(10)]
print(squares)  # 출력: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 문자열 리스트에서 길이가 5 이상인 문자열만 추출하여 리스트 생성
words = ["apple", "banana", "grape", "kiwi"]
long_words = [word for word in words if len(word) >= 5]
print(long_words)  # 출력: ['apple', 'banana', 'grape']

 

제너레이터 표현식(Generator Expression)

제너레이터 표현식은 리스트 컴프리헨션과 유사하지만, 괄호를 사용하여 표현합니다.

제너레이터 표현식은 제너레이터(generator)를 생성하여 한 번에 하나의 요소만 메모리에 저장하므로 더 효율적입니다.

# (표현식 for 항목 in 반복 가능한 객체 if 조건)

# 0부터 9까지의 제곱을 생성하는 제너레이터 생성
squares = (x**2 for x in range(10))
print(squares)  # 출력: <generator object <genexpr> at 0x7f4f8e8a5f50>
print(list(squares))  # 출력: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 문자열 리스트에서 길이가 5 이상인 문자열만 추출하는 제너레이터 생성
words = ["apple", "banana", "grape", "kiwi"]
long_words = (word for word in words if len(word) >= 5)
print(list(long_words))  # 출력: ['apple', 'banana', 'grape']