파이썬 - 유용한 문법 (포맷팅, 리스트 캄프리헨션, 람다, glob, os)

hyun-jin·2025년 3월 10일

데이터 분석

목록 보기
16/100
post-thumbnail

데이터 분석 14일차

1. 포맷팅(formatting)

  • 문자열을 포맷하는 가장 간결하고 직관적인 방법
  • 중괄호 {} 안에 변수명을 직접 넣어 사용
  • print()보다 편함
name = "Alice"
age = 25
print(f"이름: {name}, 나이: {age}")
# 결과: 이름: Alice, 나이: 25

🎯 수식도 가능

price = 19.99
discount = 0.1
print(f"할인가: {price * (1 - discount):.2f}원")
# 결과: 할인가: 17.99원

🎯 f-string에서 정렬 가능

name = "Bob"
print(f"|{name:^10}|")  # 가운데 정렬 (총 10칸)
print(f"|{name:<10}|")  # 왼쪽 정렬
print(f"|{name:>10}|")  # 오른쪽 정렬
#결과: 
#|   Bob    |
#|Bob       |
#|       Bob|


2. 리스트 캄프리헨션

  • 리스트를 쉽고 간결하게 생성하는 문법
  • 기존의 for문을 한 줄로 줄여서 더 빠르고, 가독성이 좋은 코드를 만들 수 있다.

📌 기본적인 구조

new_list = [표현식 for 변수 in 반복가능한객체 if 조건문]

✔️ 표현식 → 리스트에 담을 값
✔️ for 변수 in 반복가능한객체 → for 루프를 돌면서 값을 가져옴
✔️ if 조건문 → (선택 사항) 특정 조건을 만족하는 경우만 리스트에 추가

- 일반 for문 사용

numbers = [1, 2, 3, 4, 5]
squared = []
for num in numbers:
    squared.append(num ** 2)
print(squared)
#✔️출력: [1, 4, 9, 16, 25]

✅ 리스트 컴프리헨션 사용 (한 줄로 간결하게)

numbers = [1, 2, 3, 4, 5]
squared = [num ** 2 for num in numbers]
print(squared)
#✔️출력: [1, 4, 9, 16, 25]

🚀 동일한 결과지만 코드가 훨씬 짧아짐!



3. lambda(람다)란?

  • 익명 함수(anonymous function)라고도 하며, 한 줄로 간결하게 작성할 수 있는 간단한 함수이다.

🚀 주요 특징

  1. 이름 없이 정의 가능 → def 없이 한 줄로 함수를 생성
  2. 간단한 연산에 사용 → 짧고 가벼운 기능을 수행하는 경우 유용
  3. 다른 함수의 인자로 전달 가능 → map(), filter(), sorted() 같은 함수에서 자주 사용

✅ 1) 기본 문법

lambda 매개변수: 표현식

✔️ lambda 키워드로 시작
✔️ 매개변수를 받고 : 뒤에 연산 결과(표현식) 작성
✔️ return 없이 결과를 반환


✅ 2) 람다 함수 vs 일반 함수

- 일반 함수 사용 (def)

def add(x, y):
    return x + y
print(add(3, 5))  # 8

- 람다 함수로 변환

add = lambda x, y: x + y
print(add(3, 5))  # 8

🚀 def 없이 한 줄로 간결하게 작성 가능!


- 람다 함수 사용 예제
📌 제곱값 구하기

square = lambda x: x ** 2
print(square(4))  # 16

📌 삼항 연산자 활용 (짝수/홀수 판별)

check_even = lambda x: "짝수" if x % 2 == 0 else "홀수"
print(check_even(7))  # 홀수

📌 리스트 정렬 (sorted()에서 lambda 사용)

students = [("Alice", 25), ("Bob", 20), ("Charlie", 22)]
# 나이 기준으로 정렬
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students)
# 출력: [('Bob', 20), ('Charlie', 22), ('Alice', 25)]

🚀 key=lambda x: x[1] → 각 요소의 두 번째 값(나이)을 기준으로 정렬

📌 map()에서 lambda 사용

  • map()은 리스트의 모든 요소에 특정 함수를 적용할 때 사용
numbers = [1, 2, 3, 4, 5]
# 모든 요소를 제곱
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # [1, 4, 9, 16, 25]

🚀 map()을 사용하면 반복문 없이 한 줄로 변환 가능!

📌 filter()에서 lambda 사용

  • filter()는 특정 조건을 만족하는 요소만 필터링할 때 사용됩니다.
numbers = [1, 2, 3, 4, 5, 6]
# 짝수만 필터링
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)  # [2, 4, 6]

🚀 lambda와 filter()를 조합하면 리스트 필터링을 쉽게 구현 가능!

📌 reduce()에서 lambda 사용

  • reduce()는 리스트의 값을 누적 연산할 때 사용(먼저 functools.reduce를 임포트해야 함)
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 리스트 요소 모두 곱하기
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 120 (1*2*3*4*5)

🚀 reduce()를 사용하면 리스트 요소를 차례대로 누적 연산 가능!



4. glob

  • 파일 시스템에서 특정 패턴을 가진 파일을 검색할 때 사용
  • ✅ os.listdir()과 비슷하지만, glob은 와일드카드(*, ?)를 사용해 더 강력한 검색 기능을 제공

1) glob 기본 사용법
📌 glob.glob()

  • 특정 패턴과 일치하는 파일 목록을 리스트로 반환합니다.
import glob
#
# 현재 경로의 모든 파일을 찾기
file_list1 = glob.glob('*')
import glob
#
# 현재 디렉토리의 모든 `.txt` 파일 찾기
txt_files = glob.glob("*.txt")
print(txt_files)
# 단일 파일 패턴으로 파일을 찾기
file_list2 = glob.glob('drive')
# 디렉토리 안의 모든 파일 찾기
file_list3 = glob.glob('sample_data/*')
# 특정 확장자를 가진 파일만 찾기
file_list4 = glob.glob('sample_data/*.csv')


5. os

  • 운영체제(OS, Operating System)와 상호작용하는 기능을 제공
  • ✅ 파일 및 디렉토리 관리, 환경 변수 접근, 시스템 정보 확인 등을 수행할 수 있다.

먼저 os 모듈을 사용하려면 import
import os

- 파일 및 디렉토리 관리:

📌 현재 작업 디렉토리 가져오기

import os
cwd = os.getcwd()
print(cwd)

📌 디렉토리 생성

import os
os.mkdir('sample_data/new_directory')

📌 파일 이름 변경

import os
os.rename('sample_data/new_directory', 'sample_data/new_directory2')

📌 파일 삭제

import os
os.remove(file_adress)
#
import os
os.remove('sample_data/data.csv')

- 경로 관리:

📌 파일 목록(경로) 가져오기

import os
files = os.listdir('/content')
print(files)

📌 경로 조작

import os
path = os.path.join('/content', 'sample_data', 'mnist_test.csv')
print(path)


리스트 컴프리헨션와 람다를 잘 이해하고 활용하면 더 효율적인 코드를 짤수 있을 것 같지만, 아직 어렵다...

0개의 댓글