파이썬 공부중/파이썬 기초

javascript와 python의 for문의 차이:

책다니엘 2024. 2. 3. 05:09

javascript로 개발 공부를 하고, python을 배우게 되면서

가장 자주 사용하는 for문에 대해 좀 더 깊게 이해하게 되었다.

 

반복문이란 정말 아름다운 것이다!

 

 

1. Javascript

 

먼저 javascript에서 쓰이는 for문은 다음과 같다.

 

  1. for
  2. for...in
  3. for...of
  4. forEach() - (Array 메소드)
  5. while
  6. do...while

 

for

js에서 가장 일반적인 for문의 형태는 다음과 같다.

for(let i = 0; i<10; i++){
	console.log(i);
}

 

여기서 

 let i = 0  : 변수 let i를 선언하고 초기값으로 0을 할당

 i < 10  : 반복문을 실행할 조건(i가 10보다 작으면 계속 실행)

 i++  : 1번 순회할 때마다 i에 1을 추가한다는 증감식

 

위 코드를 실행하면 0, 1, 2, 3, ...., 9까지 출력하고 코드가 종료될 것이다.

 

 

for ...in 

for in 문은 object에 사용할 수 있는 반복문이다.(배열에도 사용할 수는 있지만, 배열에는 for or 문을 더 많이 사용한다.)

const obj = {
  name : '책다니엘',
  age : '나이'
}

for(const key in obj){
  console.log(key); // key값 출력
  console.log(obj.name, obj.age); // value 값 출력

  console.log(`key 값 : ${key}`); // key값 : 이름 // key값 :age
  console.log(`value 값 : ${obj[key]}`); // value 값 : 이름 // value값 : 나이
}

 

파이썬의 for문과 비슷한데(for mark in marks 등으로 나타나는 그것), 파이썬에서는 배열 내에서 순회를 돌릴 때 for in문을 사용하지만, js에서는 object 객체를 순회하는 데 사용한다.


ex) obj.name은 obj라는 object 내에 name이라는 key를 호출하는 것이다. 해당하는 key가 없을 경우 undefined가 출력된다.
객체의 모든 value값을 얻으려면 obj[key]로 객체를 순회하여 얻을 수 있다.

 

for ... of 

파이썬의 for ... in 문과 거의 비슷한 바로 그것이다. for of문은 반복 가능한 객체(Array, Map, Set, String, TypedArray, arguments 객체 등 포함)에 대해 사용할 수 있다. 보통 Array에 사용한다.

 

const arr = ['A', 'B', 'C'];

for(const element of arr) {
  console.log(element); // 배열[0] ~ 끝까지 순차 출력
  console.log(arr); // 배열 전체 출력
}

 

 

forEach()

배열에 사용되는 메서드이다. 인자에 콜백함수를 넣어 사용한다.

const arr = ['A', 'B', 'C'];

arr.forEach((element)=>{
  console.log(element);
})

 

while

조건이 거짓이 될 때까지 실행되는 반복문이다.

while(boolean) {
  // boolean이 참이면 실행
}

while의 ()안의 조건이 true면 실행, false면 실행되지 않는다.

boolean이 true인데 탈출 조건이 없을 경우 무한 루프, false일 경우 단 한 번도 실행되지 않는다.

 

do...while

while문과는 달리, do{}에 작성된 코드는 최소 1번은 무조건 실행된다. 
do를 먼저 실행하고 그 다음에 while문의 조건을 본다.(사실 코드의 진행 상 당연한 거긴 하다)

do {
// ... 
}while(condition)

 

 

2. Python

python의 경우, 먼저 for문의 기본 구조는 다음과 같다.

for 변수 in 리스트(또는 튜플, 문자열):
    수행할_문장1
    수행할_문장2
    ...


// 예제 코드
>>> test_list = ['one', 'two', 'three'] 
>>> for i in test_list: 
...     print(i)
... 
one 
two 
three

리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 ‘수행할_문장1’, ‘수행할_문장2’ 등이 수행된다.

 

['one', 'two', 'three'] 리스트의 첫 번째 요소인 'one'이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다. 다음에 두 번째 요소 'two'가 i 변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.

 

for + 변수 + in + (리스트, 튜플, 문자열, 배열) 의 구조, 그리고 배열의 첫 번째 요소부터 마지막 요소까지 순회한다는 점에서 자바스크립트의 for + of 구문과 매우 비슷하다는 것을 알 수 있을 것이다.

 

그렇다면 파이썬 기초에서 항상 배우는 for i in range(10) 등에서 range(10)은 무엇인가?

 

파이썬의 range(10) 메소드는 0 이상 10 미만의 정수로 구성된 range 객체를 만들어주는 메소드이다.

즉 range(10)을 선언하면 [0,1,2,3,4,5,6,7,8,9]라는 무명 배열이 하나 선언되는 것이다!

 

** 리스트 컴프리헨션의 내용을 추가한다. 

 

리스트 컴프리헨션을 통해 for문과 if문 등을 보다 간단하게 줄여 표시할 수 있다.

더보기

[표현식 for 항목 in 반복_가능_객체 if 조건문]

리스트 컴프리헨션은 조금 복잡하지만 다중 반복문도 가능하다. 이 때 표현식은 다음과 같다.

더보기

[표현식 for 항목1 in 반복_가능_객체1 if 조건문1 for 항목2 in 반복_가능_객체2 if 조건문2 ... for 항목n in 반복_가능_객체n if 조건문n]

예를 들어, 다음 코드가 있을 수 있다.

>>> a = [1,2,3,4]
>>> result = []
>>> for num in a:
...     result.append(num*3)
...
>>> print(result)
[3, 6, 9, 12]

// 자바스크립트로는 다음과 같다
let a = [1, 2, 3, 4];
let result = [];
for(let i of a){
  result.push(i * 3);
}
console.log(result)
// [3, 6, 9, 12]

 

이를 리스트 컴프리헨션으로 표현하면 다음과 같다.

 

>>> a = [1,2,3,4]
>>> result = [num * 3 for num in a]
>>> print(result)
[3, 6, 9, 12]

 

자바스크립트에는 리스트 컴프리헨션이 없다. 적어도 내가 알기로는 그렇다!