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

우아하고 파이썬적인 코드를 작성하고 싶으신가요? 다음은 간단한 작업을 수행하는 데 유용한 Python 원라이너 목록입니다.

초보자 Python 프로그래머라면 목록 및 문자열과 같은 기본 데이터 구조를 이해하는 데 시간을 할애할 것입니다. 그리고 이러한 데이터 구조에 대한 일부 작업은 간결한 한 줄 코드 스니펫을 통해 수행할 수 있습니다.

프로그래머는 코드를 짧게 만드는 것보다 가독성과 유지 관리성을 우선시해야 합니다. 그러나 Python에서는 좋은 코딩 방법을 따르는 한 줄짜리 코드를 쉽게 만들 수 있습니다.

이 기사에서는 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() 함수를 사용할 수도 있습니다. 따라서 범위(시작, 끝, 단계)는 시퀀스 시작, 시작 + 단계, 시작 + 2*단계 등을 제공합니다. 마지막 값은 (start + k*step) < end 및 (start + (k+1)*step) > end가 되도록 start + k*step이 됩니다.

목록에서 최대값과 최소값 찾기

내장된 max 및 min 함수를 사용하여 각각 목록의 최대 및 최소 요소를 계산할 수 있습니다.

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

📑 다중 할당에 대한 참고 사항

단일 할당문에서 min_elt 및 max_elt 모두에 값을 할당했음을 주목하세요. Python은 이러한 다중 할당을 지원합니다. 그리고 이것은 iterables의 압축을 풀고 동시에 여러 변수에 값을 할당할 때 유용할 수 있습니다.

목록에서 중복 제거

또 다른 일반적인 작업은 Python 목록에서 중복 항목을 제거하는 것입니다. 이는 고유한 값으로만 ​​작업해야 하는 경우에 필요합니다. 가장 간단한 방법은 목록을 세트로 변환하는 것입니다.

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

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

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

여전히 목록으로 작업해야 하므로 세트를 다시 목록으로 변환합니다. 이 작업은 다음 코드 줄을 사용하여 수행할 수 있습니다.

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

📒 Python 목록에서 중복을 제거하는 다른 기술에 대해 자세히 알아보려면 이 가이드를 확인하십시오.

목록에서 발생 개수 세기

요소가 목록에서 발생하는 횟수를 계산하려면 내장된 count() 메서드를 사용할 수 있습니다. list.count(elt)는 목록에서 elt가 발생한 횟수를 반환합니다.

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

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

>>> nums.count(7)
1

목록의 모든 요소가 조건을 충족하는지 확인

목록의 모든 요소가 조건을 충족하는지 확인하려면 Python의 내장 all() 함수를 사용할 수 있습니다.

all() 함수는 iterable을 인수로 취하고 iterable의 모든 요소가 True로 평가되면 True를 반환합니다(또는 truey).

여기에서 nums2 목록의 모든 요소가 홀수인지 확인하고 싶습니다.

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

목록 내포를 사용하여 부울 목록을 구성하고 해당 목록을 all() 함수의 인수로 전달할 수 있습니다.

여기서 짝수인 요소 4와 12에 대해 num%2!=0은 False가 됩니다. 따라서 list comprehension 식을 사용하여 구성된 부울 목록에는 False가 포함됩니다(그리고 all(list)는 False를 반환함).

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

💡 모든([]) (all(any-empty-iterable)은 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

문자열 반전

Python에서 문자열은 변경할 수 없으므로 문자열을 반전시키려는 경우 문자열의 반전된 복사본만 얻을 수 있습니다. 문자열 슬라이싱과 내장 함수를 사용하는 두 가지 일반적인 접근 방식이 있습니다. 둘 다 파이썬 원라이너로 작성할 수 있습니다.

문자열 슬라이싱 사용

단계의 음수 값을 사용한 문자열 슬라이싱은 끝에서 시작하는 문자열 조각을 반환합니다. 구문은 문자열입니다.[start:stop: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'

List Comprehension은 Python에서 가장 강력한 원라이너 중 하나입니다.

📒 Python의 목록 이해에 대해 자세히 알아보세요.

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

>>> 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'

Python 사전 만들기

목록 내포가 기존 이터러블에서 새 목록을 구성하는 데 도움이 되는 것처럼 사전 내포는 기존 이터러블에서 새 사전을 구성하는 데 도움이 될 수 있습니다.

Python 사전 이해는 즉석에서 사전을 만드는 데 도움이 되는 구성을 도울 수 있는 강력한 한 줄짜리입니다.

여기에는 문자열 목록인 이름이 있습니다.

>>> 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}

조건부로 변수에 값 할당

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

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

Python에서 이 조건부 할당을 수행하려면 삼항 연산자를 사용하여 다음과 같은 한 줄짜리 코드를 작성할 수 있습니다.

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

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

모든 순열 생성

순열은 그룹에서 요소의 가능한 배열을 나타냅니다. 그룹에 n개의 고유한 요소가 있는 경우 n! 그것들을 배열하는 가능한 방법들—따라서 n! 순열.

다음 목록 문자를 사용합시다.

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

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

>>> 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 모듈의 조합을 사용할 수 있습니다.

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

결론

이 자습서에서는 목록과 문자열에 대한 일반적인 작업을 수행하는 데 유용한 Python 원라이너를 살펴봤습니다. 우리는 또한 Python 목록 및 사전 이해와 같은 원라이너와 원하는 작업을 수행하기 위해 내장 함수와 함께 사용하는 방법을 배웠습니다.

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