매일 업데이트
2023-05-30 11:40 11 min

일반적인 작업을 단순화하는 16가지 유용한 Python 원라이너

세련되고 파이썬다운 코드를 작성하고 싶으신가요? 여기, 간단한 작업들을 수행하는 데 매우 유용한 파이썬 원라이너(한 줄 코드) 목록이 있습니다.

파이썬 초보 프로그래머라면 리스트나 문자열 같은 기본 데이터 구조를 익히는 데 시간을 많이 할애할 것입니다. 이러한 데이터 구조에 대한 몇 가지 일반적인 작업들은 간결한 한 줄의 코드 스니펫으로 처리할 수 있습니다.

프로그래머는 코드의 간결성보다는 가독성과 유지보수성을 우선시해야 합니다. 하지만 파이썬에서는 좋은 코딩 습관을 따르는 한 줄짜리 코드를 쉽게 작성할 수 있습니다.

이 글에서는 파이썬에서 간단한 리스트 및 문자열 처리 작업을 위한 한 줄 코드에 초점을 맞출 것입니다.

이제 시작해 볼까요!

숫자 리스트 생성

숫자 리스트를 만드는 가장 쉬운 방법은 range() 함수를 사용하는 것입니다. range() 함수는 리스트로 변환할 수 있는 범위 객체를 반환합니다. range(num)을 사용하면 0, 1, 2, ..., num-1의 시퀀스가 생성됩니다.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range() 함수 사용에 대해 더 자세히 알아보기

range() 함수는 선택적인 step 값과 함께 사용할 수도 있습니다. range(시작, 끝, 단계)는 시작, 시작 + 단계, 시작 + 2*단계 등의 시퀀스를 생성합니다. 마지막 값은 (시작 + k*단계) < 끝 이고 (시작 + (k+1)*단계) > 끝을 만족하는 시작 + k*단계가 됩니다.

리스트에서 최대값과 최소값 찾기

내장된 maxmin 함수를 사용하여 리스트에서 각각 최대 및 최소 요소를 쉽게 구할 수 있습니다.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 다중 할당에 대한 참고

단일 할당문에서 min_eltmax_elt 모두에 값이 할당된 것을 확인하세요. 파이썬은 이러한 다중 할당을 지원합니다. 이는 이터러블을 언패킹하고 여러 변수에 동시에 값을 할당할 때 유용하게 사용될 수 있습니다.

리스트에서 중복 제거

또 다른 일반적인 작업은 파이썬 리스트에서 중복 항목을 제거하는 것입니다. 이는 고유한 값으로만 작업해야 할 때 필요합니다. 가장 간단한 방법은 리스트를 세트(set)로 변환하는 것입니다.

세트는 요소가 모두 고유하고 해시 가능한 내장 데이터 구조입니다.

>>> nums1 = [2,4,7,9,7,10]

nums1에서 요소 7이 두 번 나타납니다. 세트로 변환하면 중복(여기서는 7)이 제거되어 고유한 값의 리스트가 남습니다.

여전히 리스트로 작업해야 하므로, 세트를 다시 리스트로 변환합니다. 이 작업은 다음 코드 한 줄로 수행할 수 있습니다.

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 파이썬 리스트에서 중복을 제거하는 다른 기술에 대해 자세히 알아보려면 이 가이드를 확인하세요.

리스트에서 발생 횟수 세기

어떤 요소가 리스트에서 몇 번 나타나는지 세려면, 내장된 count() 메서드를 사용할 수 있습니다. list.count(elt)는 리스트에서 elt가 나타나는 횟수를 반환합니다.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

여기서 7은 nums 리스트에 한 번 나타나므로 count() 메서드는 1을 반환합니다.

>>> nums.count(7)
1

리스트의 모든 요소가 조건을 만족하는지 확인

리스트의 모든 요소가 특정 조건을 만족하는지 확인하려면 파이썬 내장 함수인 all()을 사용할 수 있습니다.

all() 함수는 이터러블을 인수로 받아서 이터러블의 모든 요소가 True로 평가되면 True를 반환합니다. (혹은 참으로 간주될 수 있는 값)

여기서는 nums2 리스트의 모든 요소가 홀수인지 확인해 보고 싶습니다.

>>> nums2 = [3,4,7,11,21,67,12]

리스트 컴프리헨션을 사용하여 불리언 리스트를 만들고 해당 리스트를 all() 함수의 인수로 전달할 수 있습니다.

여기서 짝수인 요소 4와 12에 대해서는 num%2!=0이 False가 됩니다. 따라서 리스트 컴프리헨션으로 구성된 불리언 리스트에는 False가 포함되고 (그리고 all(list)는 False를 반환합니다.)

>>> all([num%2!=0 for num in nums2])
False

💡 all([])(비어 있는 이터러블에 대한 all())은 True를 반환합니다.

리스트의 일부 요소가 조건을 만족하는지 확인

리스트의 일부 요소가 조건을 만족하는지 확인하려면 any() 함수를 사용할 수 있습니다. any(some-list)는 하나 이상의 요소가 True로 평가되면 True를 반환합니다.

>>> nums2 = [3,4,7,11,21,67,12]

이전 예시와 마찬가지로, 리스트 컴프리헨션을 사용하여 불리언 리스트를 얻습니다. nums 리스트에는 짝수가 포함되어 있으므로 any() 함수는 True를 반환합니다.

>>> any([num%2 for num in nums2])
True

문자열 뒤집기

파이썬에서 문자열은 변경할 수 없으므로 문자열을 뒤집고 싶다면 문자열의 뒤집힌 복사본만 얻을 수 있습니다. 문자열 슬라이싱과 내장 함수를 사용하는 두 가지 일반적인 방법이 있으며, 둘 다 파이썬 원라이너로 작성할 수 있습니다.

문자열 슬라이싱 사용

단계(step)에 음수 값을 사용하는 문자열 슬라이싱은 문자열을 끝에서 시작하여 조각을 반환합니다. 구문은 문자열[시작:끝:단계] 입니다. 따라서 단계를 -1로 설정하고 시작 및 끝 인덱스를 무시하면 어떤 결과가 나올까요?

모든 문자를 포함하여 문자열의 끝에서 시작하는 문자열의 복사본이 반환됩니다.

>>> str1[::-1]
'olleh'

reversed() 함수 사용

내장된 reversed() 함수는 시퀀스에 대한 역 이터레이터를 반환합니다.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

다음과 같이 join() 메서드와 함께 사용할 수 있습니다.

>>> ''.join(reversed(str1))
'olleh'

문자열을 문자 리스트로 변환

문자열을 문자 리스트로 분할하고 싶다고 가정해 보겠습니다. 리스트 컴프리헨션을 사용하여 이렇게 할 수 있습니다.

>>> str1 = 'hello'

리스트 컴프리헨션은 파이썬에서 가장 강력한 원라이너 중 하나입니다.

📒 파이썬의 리스트 컴프리헨션에 대해 자세히 알아보세요.

문자열을 반복하고 각 문자를 수집합니다.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

공백이 나타날 때마다 더 긴 문자열을 문자열 리스트로 분할하려면 split() 메서드를 사용할 수 있습니다.

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

이미 리스트 컴프리헨션을 사용하여 문자열을 문자 리스트로 분할하는 방법을 살펴보았습니다. 이 예에서는 문자열을 반복하여 모든 문자를 수집했습니다.

여기서는 문자열을 반복하고 숫자만 수집해야 합니다. 그럼 어떻게 해야 할까요?

  • isdigit() 메서드를 사용하여 리스트 컴프리헨션 내에서 필터링 조건을 설정할 수 있습니다.
  • c.isdigit()c가 숫자이면 True를 반환합니다. 그렇지 않으면 False를 반환합니다.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

문자열이 특정 하위 문자열로 시작하는지 확인

문자열이 특정 하위 문자열로 시작하는지 확인하려면 startswith() 문자열 메서드를 사용할 수 있습니다. str1.startswith(substring)str1이 하위 문자열로 시작하는 경우 True를 반환합니다. 그렇지 않으면 False를 반환합니다.

다음은 몇 가지 예입니다.

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

문자열이 특정 하위 문자열로 끝나는지 확인

짐작하셨겠지만, 문자열이 주어진 하위 문자열로 끝나는지 확인하려면 endswith() 메서드를 사용할 수 있습니다.

>>> str5 = 'python'
>>> str5.endswith('on')
True

리스트 컴프리헨션 내부에서 문자열 메서드를 사용하여 불리언 리스트인 ends_with를 얻을 수도 있습니다.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

리스트의 요소를 문자열로 결합

문자열을 문자 리스트로 분할하는 방법은 이미 살펴보았습니다. 이제 리스트의 요소를 문자열로 결합하는 역 연산을 어떻게 수행할까요?

이렇게 하려면 다음 구문과 함께 join() 문자열 메서드를 사용할 수 있습니다: separator.join(some-list).

리스트의 요소를 단일 문자열로 결합하기만 하면 되므로 구분 기호가 필요하지 않습니다. 따라서 구분 기호를 빈 문자열로 설정합니다.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

파이썬 사전 만들기

리스트 컴프리헨션이 기존 이터러블에서 새 리스트를 만드는 데 도움이 되는 것처럼, 딕셔너리 컴프리헨션은 기존 이터러블에서 새 사전을 구성하는 데 도움이 될 수 있습니다.

파이썬 딕셔너리 컴프리헨션은 즉석에서 사전을 만드는 데 도움이 되는 구조를 제공하는 강력한 한 줄 코드입니다.

여기 문자열 리스트인 names가 있습니다.

>>> names = ['Joe','Amy','Jake','Florence']

이름 문자열을 키로, 문자열 길이를 값으로 포함하는 사전 names_d를 만듭니다.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

조건부로 변수에 값 할당

때로는 특정 조건에 따라 변수에 값을 할당해야 할 수도 있습니다.

예를 들어 개인의 나이와 같은 사용자 입력을 읽을 수 있습니다. 그리고 입력 값에 따라 파티 참석 여부를 결정할 수 있습니다.

파이썬에서 이 조건부 할당을 수행하기 위해 삼항 연산자를 사용하여 다음과 같은 한 줄 코드를 작성할 수 있습니다.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 파이썬의 삼항 연산자에 대해 자세히 알아보세요.

모든 순열 생성

순열은 그룹에서 요소의 가능한 배열을 나타냅니다. 그룹에 n개의 고유한 요소가 있다면 n! 개의 배열 가능한 방법이 있습니다 — 따라서 n!개의 순열이 존재합니다.

다음 문자 리스트를 사용해 보겠습니다.

>>> letters = ['a','b','c']

주어진 이터러블의 가능한 모든 순열을 생성하기 위해 itertools 모듈의 permutations를 사용할 수 있습니다.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

보시다시피 permutations(iterable)을 사용하면 for 루프를 사용하여 반복할 수 있는 순열 객체가 반환됩니다.

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

하지만 순열 객체를 리스트로 캐스팅하여 한 줄 표현으로 다시 작성할 수 있습니다.

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

여기에는 3개의 고유한 요소가 있으며 3!=6개의 가능한 순열이 있습니다.

리스트의 하위 집합 생성

때로는 리스트나 다른 이터러블에서 특정 크기의 가능한 모든 하위 집합을 구성해야 할 수도 있습니다. 문자 리스트를 사용하고 크기가 2인 모든 하위 리스트를 가져와 보겠습니다.

이를 위해 itertools 모듈의 combinations를 사용할 수 있습니다.

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

결론

이 튜토리얼에서는 리스트와 문자열에 대한 일반적인 작업을 수행하는 데 유용한 파이썬 원라이너를 살펴보았습니다. 또한 파이썬 리스트 및 딕셔너리 컴프리헨션과 같은 원라이너와 원하는 작업을 수행하기 위해 내장 함수를 함께 사용하는 방법을 배웠습니다.

다음 단계로 초보자에게 친숙한 파이썬 프로젝트 목록을 확인해 보세요.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.