세련되고 파이썬다운 코드를 작성하고 싶으신가요? 여기, 간단한 작업들을 수행하는 데 매우 유용한 파이썬 원라이너(한 줄 코드) 목록이 있습니다.
파이썬 초보 프로그래머라면 리스트나 문자열 같은 기본 데이터 구조를 익히는 데 시간을 많이 할애할 것입니다. 이러한 데이터 구조에 대한 몇 가지 일반적인 작업들은 간결한 한 줄의 코드 스니펫으로 처리할 수 있습니다.
프로그래머는 코드의 간결성보다는 가독성과 유지보수성을 우선시해야 합니다. 하지만 파이썬에서는 좋은 코딩 습관을 따르는 한 줄짜리 코드를 쉽게 작성할 수 있습니다.
이 글에서는 파이썬에서 간단한 리스트 및 문자열 처리 작업을 위한 한 줄 코드에 초점을 맞출 것입니다.
이제 시작해 볼까요!
숫자 리스트 생성
숫자 리스트를 만드는 가장 쉬운 방법은 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*단계가 됩니다.
리스트에서 최대값과 최소값 찾기
내장된 max
및 min
함수를 사용하여 리스트에서 각각 최대 및 최소 요소를 쉽게 구할 수 있습니다.
>>> min_elt, max_elt = min(nums), max(nums) >>> min_elt 0 >>> max_elt 9
다중 할당에 대한 참고
단일 할당문에서 min_elt
와 max_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')]
결론
이 튜토리얼에서는 리스트와 문자열에 대한 일반적인 작업을 수행하는 데 유용한 파이썬 원라이너를 살펴보았습니다. 또한 파이썬 리스트 및 딕셔너리 컴프리헨션과 같은 원라이너와 원하는 작업을 수행하기 위해 내장 함수를 함께 사용하는 방법을 배웠습니다.
다음 단계로 초보자에게 친숙한 파이썬 프로젝트 목록을 확인해 보세요.