for문과 리스트 심화

최대환·2021년 3월 19일
0

파이썬

목록 보기
4/16
post-thumbnail

for문

  • while문과 같이 반복문의 종류중 하나이다.
  • for 문은 리스트(list)와 같은 순서가 있는 자료를 사용해서 명령을 반복할 때 while문보다 for 문을 쓰는게 더 깔끔하고 직관적이게 코드를 짤수 있다. 이렇게 프로그래밍 언어에서 동일한 기능을 깔끔하게 만들어 놓는 것을 'syntactic sugar'(꿀)라고 부른다.
  • for문의 기본구조는 아래와 같다.
for 변수 in 리스트/range/문자열:
    <수행부분>
  • for문에서 for 과 in 사이에 있는 변수는 for문의 수행부분에서만 쓰이고 사라지는 local변수이다.

예시

💻 파이썬

number = [1, 2, 3, 4, 5, 6]

# while문으로 리스트의 모든 원소를 출력할 때
i = 0
while i < len(number):
    print(number[i])
    i += 1

print ()

# for문으로 리스트의 모든 원소를 출력할 때
for num in number:  # num 은 for 반복문의 local 변수이다. num 대신 다른 어떤걸 써도 상관없다.
    print(num)

👉 결과

1
2
3
4
5
6

1
2
3
4
5
6

range 함수

  • 파라미터가 1개 있는 range함수는 0부터 m-1 까지의 수를 의미한다.
for 변수 in range(m):
    print(변수)
  • 파라미터가 2개 있는 range함수는 n부터 m-1 까지의 수를 의미한다.
for 변수 in range(n, m):
    print(변수)
  • 파라미터가 3개 있는 range함수는 간격이 s인 n부터 m-1 까지의 수를 의미한다.
for 변수 in range(n, m, s):
    print(변수)

예시

💻 파이썬

for num in range(5):        # 0부터 4까지의 수를 출력한다. 
    print(num)

print()

for 변수 in range(1, 6):     # 1부터 5까지의 수를 출력한다. 
    print(변수)

print()

for num in range(0, 10, 2):  # 2의 간격으로 0부터 9까지의 수를 출력한다.
    print(num)

👉 결과

0
1
2
3
4

1
2
3
4
5

0
2
4
6
8

엘리어싱(Aliasing)

  • 파이썬에서 한 변수는 하나의 형태의 값만 저장할 수 있다
  • 서로 다른 변수가 하나의 형태의 값을 공유하는 개념을 엘리어싱(Aliasing)이라고 한다.
  • 원래 있던 a라는 변수의 값을 b라는 변수가 공유하면 b는 a Alias(가명)이다.
  • 리스트를 공유할때 엘리어싱이 되고 싶지 않을 때에는 list함수를 써서 list를 복제하면 된다.

예시

💻 파이썬

# 변수에서의 엘리어싱
x = 2           # x라는 변수에 값 2가 저장된다.
y = x           # y라는 변수도 값 2를 공유한다.
y = 3           # y라는 변수에 새로운 값 3을 저장한다.
print(y)        # y에 3이 저장되어 있음으로 값은 3이다.
print(x)        # x에 2가 저장되어 있음으로 값은 2이다.

print()

# 리스트에서의 엘리어싱
x = [1, 2, 3, 4, 5]   # x라는 변수에 리스트[1, 2, 3, 4, 5]가 저장된다.
y = x                 # y라는 변수도 리스트[1, 2, 3, 4, 5]를 공유한다.
y[1] = 8              # y가 가지고 있는 리스트의 인덱스1의 값을 8로 바뀐다.
print(y)              # y가 가지고 있는 리스트[1, 8, 3, 4, 5]를 출력한다.
print(x)              # x도 y와 같은 리스트를 공유하고 있었음으로 x도 바뀐다.


print()

# 엘리어싱이 되고 싶지 않을때
x = [1, 2, 3, 4, 5]   # x라는 변수에 리스트[1, 2, 3, 4, 5]가 저장된다.
y = list(x)           # y라는 변수에 리스트[1, 2, 3, 4, 5]를 복사한다.
y[1] = 8              # y가 가지고 있는 리스트의 인덱스1의 값을 8로 바뀐다.
print(y)              # 리스트[1, 8, 3, 4, 5]를 출력한다.
print(x)              # 원래 x가 가지고 있는 리스트는 그대로이므로 원래 값이 출력된다.

👉 결과

3 		# y값
2 		# x값

[1, 8, 3, 4, 5]	# y값
[1, 8, 3, 4, 5]	# x값

[1, 8, 3, 4, 5]	# y값
[1, 2, 3, 4, 5]	# x값

리스트와 문자열의 공통점과 차이점

  • 리스트와 문자열은 컴퓨터에서 저장하는 방식 매우 비슷하다.
  • 공통점
    - 인덱싱을 할수 있다
    - 슬라이싱을 할 수 있다.
    - for반복문에서 쓸 수 있다.
    - len함수를 쓸 수 있다.
    - 덧셈으로 연결할 수 있다.
  • 차이점
    - 리스트는 수정가능(Mutable)하지만 문자열은 수정 불가능(Immutable)하다.

예시

💻 파이썬

## 리스트와 문자열의 공통점
list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
word = "abcdefg"

# 인덱싱을 할 수 있다.
print(list[0])
print(word[0])

print()

# 슬라이싱을 할 수 있다.
print(list[3:])
print(word[3:])

print()

# for 반복문에서 쓸 수 있다.
for alphabet in list:
    print(alphabet)
print()
for alphabet in word:
    print(alphabet)

print()

# len 함수를 쓸 수 있다.
print(len(list))
print(len(word))

print()

# 덧셈으로 연결할 수 있다.
list_a = ['a', 'b', 'c']
list_b = ['d', 'e', 'f', 'g']
print(list_a + list_b)

word_a = "abc"
word_b = "defg"
print(word_a + word_b)

print()

## 리스트와 문자열의 차이점
# 리스트는 수정이 가능하나, 문자열은 수정이 불가능하다.
list[2] = 'Z'
print(list)
word[2] = 'Z'
print(word)

👉 결과

## 공통점
# 인덱싱
a
a

# 슬라이싱
['d', 'e', 'f', 'g']
defg

# for 반복문
a
b
c
d
e
f
g

a
b
c
d
e
f
g

# len함수
7
7

# 덧셈 연결
['a', 'b', 'c', 'd', 'e', 'f', 'g']
abcdefg

## 차이점
# 수정 불가능
['a', 'b', 'Z', 'd', 'e', 'f', 'g']
TypeError: 'str' object does not support item assignment
profile
나의 개발지식 output 공간

0개의 댓글