python - for 반복문
1. 기본 순회 비교
배열/리스트 순회
// JavaScript
const fruits = ['apple', 'banana', 'cherry'];
fruits.forEach(fruit => console.log(fruit));
// 또는
for (const fruit of fruits) {
console.log(fruit);
}# Python
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit)문자열 순회
// JavaScript
for (const char of "hello") {
console.log(char);
}# Python
for char in "hello":
print(char) # h, e, l, l, o객체/딕셔너리 순회
// JavaScript
const dict = {a: 1, b: 2, c: 3};
// 키만
for (const key in dict) {
console.log(key);
}
// 또는
Object.keys(dict).forEach(key => console.log(key));
// 값만
Object.values(dict).forEach(value => console.log(value));
// 키-값 쌍 (구조 분해 할당)
for (const [key, value] of Object.entries(dict)) {
console.log(key, value);
}# Python
dict = {'a': 1, 'b': 2, 'c': 3}
# 키만
for key in dict:
print(key)
# 값만
for value in dict.values():
print(value)
# 키-값 쌍 (언패킹)
for key, value in dict.items():
print(key, value)💡 핵심: dict.items()는 튜플 [('a', 1), ('b', 2)]를 반환하고, Python의 자동 언패킹(JS의 구조 분해 할당)으로 key, value로 분리됨
2. 인덱스 기반 반복
C 스타일 for문
// JavaScript
for (let i = 0; i < 5; i++) {
console.log(i); // 0~4
}
for (let i = 1; i <= 5; i++) {
console.log(i); // 1~5
}
for (let i = 0; i < 10; i += 2) {
console.log(i); // 0, 2, 4, 6, 8
}
for (let i = 10; i > 0; i--) {
console.log(i); // 10~1
}# Python - range() 사용
for i in range(5):
print(i) # 0~4
for i in range(1, 6):
print(i) # 1~5
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
for i in range(10, 0, -1):
print(i) # 10~1💡 차이점: Python은 range(start, end, step) 사용 (end는 포함 안 됨)
3. 인덱스 + 값 동시에
// JavaScript
const fruits = ['apple', 'banana', 'cherry'];
fruits.forEach((fruit, index) => {
console.log(index, fruit);
});
// 또는
for (const [index, fruit] of fruits.entries()) {
console.log(index, fruit);
}# Python - enumerate() 사용
fruits = ['apple', 'banana', 'cherry']
for index, fruit in *enumerate*(fruits):
print(index, fruit)
# 0 apple
# 1 banana
# 2 cherry
# 시작 인덱스 지정
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
# 1 apple
# 2 banana
# 3 cherry4. 여러 배열 동시 순회
// JavaScript
const names = ['Alice', 'Bob', 'Charlie'];
const ages = [25, 30, 35];
// 방법 1: 인덱스 사용
for (let i = 0; i < names.length; i++) {
console.log(`${names[i]} is ${ages[i]} years old`);
}
// 방법 2: map + entries (비추천)
names.forEach((name, i) => {
console.log(`${name} is ${ages[i]} years old`);
});# Python - zip() 사용 (훨씬 간결!)
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")💡 Python의 zip()이 훨씬 직관적!
5. 배열 변환/필터링
map()과 filter()
// JavaScript
const numbers = [1, 2, 3, 4, 5];
// map - 변환
const squared = numbers.map(x => x ** 2);
// [1, 4, 9, 16, 25]
// filter - 필터링
const evens = numbers.filter(x => x % 2 === 0);
// [2, 4]
// map + 삼항 연산자
const result = numbers.map(x => x % 2 === 0 ? x : -x);
// [-1, 2, -3, 4, -5]
// 체이닝
const result2 = numbers
.filter(x => x % 2 === 0)
.map(x => x ** 2);# Python - List Comprehension (더 간결!)
numbers = [1, 2, 3, 4, 5]
# 변환
squared = [x**2 for x in numbers]
# [1, 4, 9, 16, 25]
## 중요포인트
[
x**2 # 1. 각 요소에 적용할 표현식
for x # 2. 반복 변수
in numbers # 3. 반복할 대상
]
# 필터링
evens = [x for x in numbers if x % 2 == 0]
# [2, 4]
# if-else (삼항 연산자 대체)
result = [x if x % 2 == 0 else -x for x in numbers]
# [-1, 2, -3, 4, -5]
# 필터 + 변환 (한 줄에!)
result2 = [x**2 for x in numbers if x % 2 == 0]2D 배열 생성
// JavaScript
const matrix = Array(3).fill(0).map((_, i) =>
Array(3).fill(0).map((_, j) => i + j)
);
// [[0,1,2], [1,2,3], [2,3,4]]# Python - 중첩 List Comprehension (더 읽기 쉬움)
matrix = [[i+j for j in range(3)] for i in range(3)]
# [[0,1,2], [1,2,3], [2,3,4]]💡 Python의 List Comprehension = JS의 map/filter보다 간결하고 빠름
6. break, continue, else
// JavaScript
// break
for (let i = 0; i < 10; i++) {
if (i === 5) break;
console.log(i); // 0,1,2,3,4
}
// continue
for (let i = 0; i < 5; i++) {
if (i === 2) continue;
console.log(i); // 0,1,3,4
}
// else 없음 (Python만의 기능)# Python
# break
for i in range(10):
if i == 5:
break
print(i) # 0,1,2,3,4
# continue
for i in range(5):
if i == 2:
continue
print(i) # 0,1,3,4
# else - break 없이 정상 종료 시 실행 (JS에 없는 기능!)
for i in range(5):
if i == 10:
break
else:
print("완료!") # 출력됨💡 Python의 for-else는 JS에 없는 독특한 기능
7. 중첩 for문
// JavaScript
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
console.log(i, j);
}
}
// 구구단
for (let i = 2; i <= 9; i++) {
for (let j = 1; j <= 9; j++) {
console.log(`${i} x ${j} = ${i * j}`);
}
}# Python (문법만 다를 뿐 동일)
for i in range(3):
for j in range(3):
print(i, j)
# 구구단
for i in range(2, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i*j}")8. 역순 순회
// JavaScript
const fruits = ['apple', 'banana', 'cherry'];
// 방법 1: reverse() (원본 변경)
fruits.reverse().forEach(fruit => console.log(fruit));
// 방법 2: 슬라이싱 없음, spread + reverse
[...fruits].reverse().forEach(fruit => console.log(fruit));
// 방법 3: 인덱스 역순
for (let i = fruits.length - 1; i >= 0; i--) {
console.log(fruits[i]);
}# Python
fruits = ['apple', 'banana', 'cherry']
# 방법 1: reversed() (가장 pythonic)
for fruit in reversed(fruits):
print(fruit)
# 방법 2: 슬라이싱 (간결!)
for fruit in fruits[::-1]:
print(fruit)
# 방법 3: range 역순
for i in range(len(fruits)-1, -1, -1):
print(fruits[i])9. 유용한 패턴
2D 배열 순회
// JavaScript
const matrix = [[1,2,3], [4,5,6], [7,8,9]];
for (const row of matrix) {
for (const item of row) {
process.stdout.write(item + ' ');
}
}# Python
matrix = [[1,2,3], [4,5,6], [7,8,9]]
for row in matrix:
for item in row:
print(item, end=' ')빈 반복문
// JavaScript
for (let i = 0; i < 5; i++) {
// TODO: 나중에 구현
}# Python - pass 키워드
for i in range(5):
pass # 나중에 구현한 줄 반복문
// JavaScript
[0,1,2,3,4].forEach(i => console.log(i));
// reduce로 합계
const result = [0,2,4,6,8].reduce((sum, x) => sum + x**2, 0);# Python
[print(i) for i in range(5)]
# sum으로 합계 (더 간결!)
result = sum([x**2 for x in range(10) if x % 2 == 0])10. 문법 비교표
| 기능 | JavaScript | Python |
|---|---|---|
| C 스타일 반복 | for(let i=0; i<5; i++) |
for i in range(5): |
| forEach | arr.forEach(item => {}) |
for item in arr: |
| for...of | for(const item of arr) |
for item in arr: |
| map | arr.map(x => x*2) |
[x*2 for x in arr] |
| filter | arr.filter(x => x>0) |
[x for x in arr if x>0] |
| 인덱스+값 | arr.entries() |
enumerate(arr) |
| 여러 배열 | 없음 (직접 구현) | zip(arr1, arr2) |
| 객체 순회 | Object.entries(obj) |
dict.items() |
| 역순 | arr.reverse() |
reversed(arr), arr[::-1] |
11. 코딩테스트 필수 패턴
// JavaScript
const arr = [1, 2, 3, 4, 5];
// 1. 인덱스만 필요
for (let i = 0; i < arr.length; i++) {
console.log(i, arr[i]);
}
// 2. 인덱스+값
arr.forEach((val, i) => console.log(i, val));
// 3. 두 배열 동시 (불편함)
for (let i = 0; i < list1.length; i++) {
console.log(list1[i], list2[i]);
}
// 4. 필터링
const result = arr.filter(x => x > 0);
// 5. 변환
const result2 = arr.map(x => x ** 2);# Python (더 간결!)
arr = [1, 2, 3, 4, 5]
# 1. 인덱스만 필요
for i in range(len(arr)):
print(i, arr[i])
# 2. 인덱스+값 (enumerate가 더 편함!)
for i, val in enumerate(arr):
print(i, val)
# 3. 두 배열 동시 (zip으로 간단!)
for a, b in zip(list1, list2):
print(a, b)
# 4. 필터링
result = [x for x in arr if x > 0]
# 5. 변환
result = [x**2 for x in arr]핵심 요약
✅ Python이 더 간결한 것:
enumerate()- 인덱스+값zip()- 여러 배열 동시 순회- List Comprehension - map/filter 대체
range()- C 스타일 for문 대체
✅ JS와 같은 개념:
for item in arr=for (const item of arr)dict.items()=Object.entries()- 튜플 언패킹 = 구조 분해 할당
✅ Python만의 독특한 기능:
for-else문- 슬라이싱
[::-1](역순) - List Comprehension
- Python의 내장 문법 (특별히 지원되는 기능)
- for문 + append를 한 줄로 축약
- JavaScript의
.map(),.filter()와 같은 역할 - 더 간결하고 빠름 (C로 최적화됨)
댓글
첫 번째 댓글을 남겨보세요.