모두가 알다시피 python의 장점 중 하나는 간단한 문법이다.
다른 언어에서 많은 줄을 사용해야 만들 수 있는 리스트를 한 줄로 표현할 수 있다.
list comprehension을 잘 이용하면 코드가 훨씬 간결하고 이뻐보인다.
예시를 들어보겠다
정수 리스트가 주어졌을 때, 각 요소에 1을 더한 새로운 리스트를 만들고 싶을 때,
list comprehension을 이용하지 않으면 for문을 활용하여 다음과 같이 작성할 수 있다.
my_list = [1, 2, 3]
new_list = []
for num in my_list:
new_list.append(num + 1)
print(new_list) # = [2, 3, 4]
하지만, list comprehension을 이용하면 다음과 같이 작성할 수 있다.
my_list = [1,2,3]
new_list = [num + 1 for num in my_list]
print(new_list) # = [2, 3, 4]
확실히 3줄이였던 코드가 훨씬 깔끔하게 한 줄로 표현이 되었다.
list comprehension에는 추가적으로 조건을 부여할 수 있다.
예를 들어 아까의 예시에서, 홀수 숫자(1, 3)만 두배를 하는 조건을 걸어보자
my_list = [1, 2, 3, 4, 5 ,6]
new_list = [num * 2 if num % 2 == 1 else num for num in my_list]
print(new_list) # = [2, 2, 6, 4, 10, 6]
만약 코드를 다음과 같이 짜면 오류가 발생하니, 순서를 숙지하도록 하자
my_list = [1, 2, 3, 4, 5 ,6]
new_list = [num * 2 for num in my_list if num % 2 == 1 else num ] # Syntax Error
print(new_list)
또한, 코드를 다음과 같이 짜면 짝수인 경우를 무시하게 된다.
조건문이 모든 요소를 대상으로 하고 있는지를 확실히 하자.
my_list = [1, 2, 3, 4, 5 ,6]
new_list = [num * 2 for num in my_list if num % 2 == 1]
print(new_list) # = [2, 6, 10]
list comprehension은 숫자 리스트에서만 적용되는 것이 아니다.
다음과 같은 예시를 보면, 문자 리스트에서 적용됨을 알 수 있다. (문자열.upper() 메소드는 모든 문자열을 대문자로 변경한다.)
name_list = ["Ricky", "Isabelle", "Hailey", "Johnson", "Heiden"]
new_name_list = [name.upper() for name in name_list]
print(new_name_list) # = ["RICKY", "ISABELLE", "HAILEY", "JOHNSON", "HEIDEN"]
문자열 리스트에서도 역시, 조건문을 통해 일부 문자에만 적용하는 것이 가능하다.
아까의 예시에서 글자 수가 6개인 문자만 대문자로 바꾸어 리스트로 만들어보자.
name_list = ["Ricky", "Isabelle", "Hailey", "Johnson", "Heiden"]
new_name_list = [name.upper() if len(name) == 6 else name for name in name_list]
print(new_name_list) # = ["Ricky", "Issabelle", "HAILEY", "Johnson", "HEIDEN"]
정상적으로 적용되어 글자 수가 6개인 Hailey, Heiden에만 upper()메소드가 적용된 것을 확인할 수 있다.
'python' 카테고리의 다른 글
[programmers] 문자열 여러번 뒤집기 (python) (8) | 2023.10.11 |
---|---|
[python] tkinter miles km converter / tkinter 마일 킬로미터 변환기 (3) | 2023.10.10 |
[python] *args 과 **kwargs (6) | 2023.10.10 |
[python] code-runner extension 파일 실행 시 터미널을 초기화, file path 출력 안되게 변경 (0) | 2023.10.08 |
[python] Turtle graphics로 뱀게임 만들기 (0) | 2023.09.27 |