출처: Top 50 Python Programming Interview Questions With Answers
파이썬 프로그래밍 관련 인터뷰 질문 모음을 정리하였습니다.
my_list = [1, 2, 2, 3, 4] # 중복 허용
my_set = {1, 2, 3, 4} # 중복 없음
collections
모듈의 목적은 무엇인가요?collections
모듈은 특화된 컨테이너 데이터 타입을 제공합니다.p# 예: Counter를 사용한 발생 횟수 계산
from collections import Counter
result = Counter("abracadabra")
print(result) # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
try-except
블록을 사용합니다.try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
# 자동 메모리 관리 예
my_list = [1, 2, 3]
__init__
메서드의 목적은 무엇인가요?__init__
은 객체가 생성될 때 호출되는 생성자 메서드로, 객체의 속성을 초기화합니다.class MyClass:
def __init__(self, value):
self.value = value
obj = MyClass(42)
print(obj.value) # 42
import copy
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original_list) # 중첩 객체는 참조
deep_copy = copy.deepcopy(original_list) # 중첩 객체까지 복사
try
, except
, finally
블록을 사용합니다.try
: 실행 코드.except
: 예외 발생 시 실행 코드.finally
: 예외 여부와 관계없이 항상 실행.try:
result = int("abc")
except ValueError as e:
print(f"Error: {e}")
map
함수와 filter
함수의 목적은 무엇인가요?map
: 입력 리스트의 모든 요소에 함수를 적용.filter
: 조건을 만족하는 요소만 필터링.numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25]
even = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
for
또는 if
문을 포함할 수 있습니다.squared = [x**2 for x in range(5) if x % 2 == 0] # [0, 4, 16]
class A:
pass
class B:
pass
class C(A, B):
pass
with
문은 무엇을 위해 사용되나요?with open('example.txt', 'r') as file:
content = file.read()
def my_decorator(func):
def wrapper():
print("함수 실행 전")
func()
print("함수 실행 후")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
append
와 extend
의 차이점은 무엇인가요?append
: 요소를 리스트 하나로 추가.extend
: 요소를 각각의 개별 요소로 추가.ids1 = [1, 2, 3]
ids2 = [4, 5]
ids1.append(ids2) # [1, 2, 3, [4, 5]]
ids1.extend(ids2) # [1, 2, 3, 4, 5]
dropna()
와 fillna()
메서드를 사용하여 결측값을 처리할 수 있습니다.# 결측값이 포함된 행 제거
df_cleaned = df.dropna()
# 결측값을 특정 값(예: 평균)으로 대체
df_filled = df.fillna(df.mean())
lambda
함수의 목적은 무엇인가요?lambda
함수는 익명 함수를 생성하는 데 사용됩니다.map
, filter
, sort
같은 함수에서 사용됩니다.# 예제: lambda 함수 사용
square = lambda x: x**2
result = square(5) # 25 출력
open()
함수를 사용하여 파일을 열고, read()
, write()
, close()
메서드로 파일을 읽거나 쓸 수 있습니다.# 파일 읽기 예제
with open('example.txt', 'r') as file:
content = file.read()
with
문을 사용하면 파일이 자동으로 닫힙니다.BeautifulSoup
라이브러리를 사용하여 HTML을 파싱하고, requests
를 사용해 웹페이지의 HTML을 가져올 수 있습니다.import requests
from bs4 import BeautifulSoup
def get_product(url):
try:
# HTML 가져오기
resp = requests.get(url)
resp.raise_for_status() # HTTP 오류 발생 시 예외 처리
# HTML 파싱
soup = BeautifulSoup(resp.content, 'html.parser')
# 제품 정보 추출
title = soup.find('span', {'id': 'productTitle'}).get_text(strip=True)
price = soup.find('span', {'id': 'priceblock_ourprice'}).get_text(strip=True)
rating = soup.find('span', {'class': 'a-icon-alt'}).get_text(strip=True) # HTML 구조에 따라 조정 필요
return {'title': title, 'price': price, 'rating': rating}
except requests.RequestException as req_err:
print(f"요청 오류: {req_err}")
except Exception as err:
print(f"오류 발생: {err}")
return None
# 함수 실행 예제
if __name__ == "__main__":
prod_url = "https://www.amazon.com/example-product-url"
prod_info = get_product(prod_url)
if prod_info:
print("제품 정보:")
print(f"제목: {prod_info['title']}")
print(f"가격: {prod_info['price']}")
print(f"평점: {prod_info['rating']}")
__str__
과 __repr__
메서드의 목적은 무엇인가요?__str__
: 사람이 읽기 쉬운 형식의 문자열 표현을 반환합니다. 주로 print()
함수에서 사용됩니다.__repr__
: 객체의 디버깅이나 재현 가능한 표현을 반환합니다.# 예제: __str__ 및 __repr__ 메서드
class MyClass:
def __str__(self):
return "이 객체는 MyClass입니다"
def __repr__(self):
return "MyClass()"
obj = MyClass()
print(obj) # "이 객체는 MyClass입니다" 출력
print(repr(obj)) # "MyClass()" 출력
# 기존 방식
high_scores = []
for player in players:
if player.status == "active":
high_scores.append(player.score)
# 리스트 컴프리헨션
high_scores = [player.score for player in players if player.status == "active"]
def read_log(file_path):
with open(file_path, 'r') as log_file:
for line in log_file:
yield line.strip()
# 사용 예
log_gen = read_log("path/azure.log")
for line in log_gen:
print(line)
except
절에 예외를 튜플로 지정하거나 일반적인 except
절로 모든 예외를 포착할 수 있습니다.try:
result = 10 / 0
except (ZeroDivisionError, ValueError) as e:
print(f"Error: {e}")
super()
함수의 목적은 무엇인가요?super()
함수는 부모 클래스의 메서드를 호출하는 데 사용됩니다.__init__
메서드에서 부모 클래스의 초기화를 호출할 때 사용됩니다.class Parent:
def __init__(self):
print("Parent 클래스 초기화")
class Child(Parent):
def __init__(self):
super().__init__()
print("Child 클래스 초기화")
obj = Child()
출력
Parent 클래스 초기화
Child 클래스 초기화
enumerate
함수는 어떻게 사용되나요?enumerate
함수는 시퀀스를 반복하면서 인덱스와 요소를 동시에 추적할 수 있습니다.fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
print(f"Index: {index}, Fruit: {fruit}")
출력
Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: orange
yield
키워드를 사용합니다.return
키워드를 사용합니다.# 생성자 예제
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
for value in gen:
print(value)
출력
1
2
3
threading
모듈을 통해 멀티스레딩을 지원합니다.그러나 GIL(Global Interpreter Lock) 때문에 멀티스레딩은 I/O 바운드 작업에 더 적합합니다.import threading
def my_function():
print("Thread 실행")
thread = threading.Thread(target=my_function)
thread.start()
@property
데코레이터는 무엇인가요?@property
데코레이터는 메서드를 읽기 전용 속성처럼 사용할 수 있게 만듭니다.class MyClass:
def __init__(self):
self._value = 42
@property
def value(self):
return self._value
obj = MyClass()
print(obj.value) # 42 출력
import numpy as np
arr = np.array([0.1, 0.2, 0.3])
print(arr) # [0.1 0.2 0.3]
__name__
변수의 목적은 무엇인가요?__name__
변수는 스크립트가 직접 실행 중인지 또는 모듈로 임포트되었는지를 판별하는 데 사용됩니다.if __name__ == "__main__":
print("이 스크립트는 메인 프로그램으로 실행되고 있습니다.")
pd.read_csv()
함수를 사용하여 CSV 파일을 Pandas 데이터프레임으로 읽어올 수 있습니다.import pandas as pd
df = pd.read_csv('example.csv')
import pandas as pd
df_filtered = df[df['Salary'] > 50000]
print(df_filtered)
zip
함수는 어떻게 여러 리스트의 요소를 결합하나요?zip
함수는 여러 이터러블의 대응 요소를 짝지어 새로운 튜플 이터레이터를 생성합니다.hairstype = ["long", "short", "curly"]
eyecolor = ["blue", "green", "brown"]
# 결합 생성
combos = zip(hairstype, eyecolor)
# 결과 출력
for i, (hair, eye) in enumerate(combos, start=1):
print(f"{i} {hair} hair and {eye} eyes"
1 long hair and blue eyes
2 short hair and green eyes
3 curly hair and brown eyes
from collections import defaultdict as dd
from itertools import combinations as comb
def gen_word_mtx(posts):
mtx = dd(int)
for post in posts:
words = post.split()
for pair in comb(set(words), 2):
mtx[pair] += 1
return mtx
def word_pairs(mtx, threshold):
return [pair for pair, count in mtx.items() if count >= threshold]
# 사용 예시
posts = [
"I love coding and programming.",
"Coding is my passion.",
"Programming requires patience.",
"I enjoy programming challenges.",
]
mtx = gen_word_mtx(posts)
threshold = 2
frequent_pairs = word_pairs(mtx, threshold)
print("Frequent word pairs:", frequent_pairs)
__str__
과 __repr__
메서드의 목적은 무엇인가요?__str__
: 객체를 사람이 읽기 쉬운 형식으로 나타냄.__repr__
: 객체를 디버깅용 형식으로 나타냄.class MyClass:
def __str__(self):
return "This is a MyClass object"
def __repr__(self):
return "MyClass()"
obj = MyClass()
print(obj) # "This is a MyClass object"
print(repr(obj)) # "MyClass()"
def rem_dup_hashtags(post):
words = post.split()
uniq_words = []
for word in words:
if word.startswith('#') and word not in uniq_words:
uniq_words.append(word)
elif not word.startswith('#'):
uniq_words.append(word)
return ' '.join(uniq_words)
# 사용 예시
user_post = "Enjoying a great day with #friends! #Friends forever. #Fun times ahead! #Friends"
cleaned_post = rem_dup_hashtags(user_post)
print("Cleaned post:", cleaned_post)
def top_n_influencers(posts, n):
metrics = {}
for post in posts:
metric = post['engage']
author = post['author']
metrics[author] = metrics.get(author, 0) + metric
top_influencers = sorted(metrics.items(), key=lambda x: x[1], reverse=True)
return top_influencers[:n]
# 사용 예시
posts = [
{'author': 'Inf1', 'engage': 150},
{'author': 'Inf2', 'engage': 120},
{'author': 'Inf1', 'engage': 80},
]
top_influencers = top_n_influencers(posts, 2)
print("Top Influencers:", top_influencers)
@property
데코레이터는 무엇인가요?@property
데코레이터는 메서드를 읽기 전용 속성으로 바꿔줍니다.python
코드 복사
class MyClass:
def __init__(self):
self._value = 42
@property
def value(self):
return self._value
obj = MyClass()
print(obj.value) # 42 출력
name = "Ramashish"
age = 25
message = f"My name is {name} and I am {age} years old."
print(message)
def rev(post):
words = post.split()
rev_words = [w[::-1] if w.isalpha() else w for w in words]
return ' '.join(rev_words)
# 사용 예시
post1 = "Hello, world! Coding is fun."
reversed_post = rev(post1)
print("Reversed post:", reversed_post)
in
키워드를 사용하여 키가 존재하는지 확인할 수 있습니다.존재하지 않는 키에 접근하면 KeyError가 발생합니다.my_dict = {'name': 'Siteshwar', 'age': 25}
# 키 존재 여부 확인
if 'name' in my_dict:
print(my_dict['name']) # "Siteshwar"
# 존재하지 않는 키에 접근
try:
print(my_dict['city'])
except KeyError:
print("Key not found.") # "Key not found."
__name__
변수의 목적은 무엇인가요?__name__
변수는 스크립트가 직접 실행 중인지, 아니면 모듈로 임포트되었는지를 판별하는 데 사용됩니다.if __name__ == "__main__":
print("This script is being run as the main program.")
df_filtered = df[df['Score'] > 80]
emoji
라이브러리와 collections.Counter
를 사용하여 이모지를 추출하고 빈도를 계산합니다.mport emoji
from collections import Counter
def most_frequent_emojis(imessages):
emojis = [c for m in imessages for c in m if c in emoji.UNICODE_EMOJI['en']]
emoji_counts = Counter(emojis)
return emoji_counts.most_common()
# 사용 예시
imessages = [
"Hey! 😊 How are you today? 😊",
"I'm doing well, thanks! 😊",
"Let's catch up later. 😊",
"Sure! 😊",
]
most_freq = most_frequent_emojis(imessages)
print("Most frequently used emojis:")
for emo, count in most_freq:
print(f"{emo}: {count} times")
import torch
from torchvision import models, transforms as T
from PIL import Image
def cat_photos(photo_paths):
model = models.resnet18(pretrained=True).eval()
transform = T.Compose([T.Resize((224, 224)), T.ToTensor(),
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
cat = {}
for path in photo_paths:
img = Image.open(path).convert('RGB')
input_tensor = transform(img)
output = model(input_tensor.unsqueeze(0))
with open("imagenet_classes.txt", "r") as file:
labels = [line.strip() for line in file.readlines()]
_, idx = torch.max(output, 1)
label = labels[idx.item()]
cat.setdefault(label, []).append(path)
return cat
# 사용 예시
photos = ["path/to/photo1.jpg", "path/to/photo2.jpg", "path/to/photo3.jpg"]
result = cat_photos(photos)
for category, paths in result.items():
print(f"{category.capitalize()}: {len(paths)} photos")
nltk
라이브러리를 사용하여 불용어(stop words)를 제외하고 단어 빈도를 계산합니다.import nltk
from nltk.corpus import stopwords
from collections import Counter
nltk.download('stopwords')
def get_freq_of_words(post):
words = nltk.word_tokenize(post.lower())
stop_words = set(stopwords.words('english'))
words = [word for word in words if word.isalnum() and word not in stop_words]
word_freq = Counter(words)
return dict(word_freq)
# 사용 예시
fb_post = "Hello world! How's your Python coding going on. #Startlearn #Ready"
result = get_freq_of_words(fb_post)
print("Word Frequency:")
for word, freq in result.items():
print(f"{word}: {freq} times")
pd.DataFrame()
생성자를 사용하여 딕셔너리를 데이터프레임으로 변환할 수 있습니다.import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 22]}
df = pd.DataFrame(data)
print(df)
groupby()
메서드를 사용합니다.grouped_data = df.groupby('Category')
np.mean()
과 np.average()
의 차이점은 무엇인가요?np.mean()
: 산술 평균을 계산합니다.np.average()
: 가중치를 지정하여 평균을 계산할 수 있습니다.import numpy as np
arr = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
mean_result = np.mean(arr)
weights = np.array([0.1, 0.2, 0.3, 0.2, 0.2])
wavg_result = np.average(arr, weights=weights)
print(f"Arithmetic Mean: {mean_result}")
print(f"Weighted Average: {wavg_result}")
set()
을 사용하여 중복을 제거한 뒤 리스트로 변환합니다.main_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(main_list))
print(unique_list) # [1, 2, 3, 4, 5]