프로그래밍/Python

[파이썬 독학] 5. 변수와 리스트(feat 이중리스트)

Beginner:) 2022. 7. 7.
320x100

2022.07.04 - [프로그래밍/Python] - [Python 독학] 4. 변수&연산

 

[Python 독학] 4. 변수&연산

2022.06.27 - [프로그래밍/Python] - [Python 배우기] 3. 자료형 [Python 배우기] 3. 자료형 2022.06.26 - [프로그래밍/Python] - [Python 배우기] 2. 파이참(PyCharm) 설치 [Python 배우기] 2. 파이참(PyCharm)..

park-duck.tistory.com

 

변수와 리스트는 개념만 이해하면 쉽다.

 

학교 전교생이 운동장에 모두 모였다.

 

선생님이 인원체크를 하려 한다.

 

이때 모든 학생들이 섞여있을 때 인원체크가 빠를까?

반끼리 모여있는 학생들의 인원체크가 빠를까?

 

"1번 철수. 옆에, 2번 길동이. 옆에, 3번 개똥이... 15번 진수"가 빠르다. 

 

섞여있는 게 변수라면 

반끼리 모여있는 건 리스트이다. 

저장공간 규칙적이게 나열되어있는 것이 리스트이다. 

 


 

리스트와 변수에 좀 더 얘기해본다.

 

이전에 변수를 데이터를 기억공간이라고 했다. 

 

그럼 변수라는 데이터를 기억하는 공간이 어디인가 하면 메모리(RAM)라는 곳에 저장을 한다.

 

메모리라는 곳에 변수는 어떤 방식으로 저장을 하냐면 RAM(Random Access Memory), 즉 랜덤한 위치에 저장을 한다.

 

왜 랜덤한 위치에 저장하냐면 그건 지금 현재 알 필요는 없다. (간단하게 말하면 효율적인 측면에서 랜덤이 선호된다)

 

그럼 변수 a와 b가 있다고 가정하자

 

a와 b의 메모리 주소, 즉 메모리 공간의 위치는 서로 다르다. 연관성이라곤 1도 없이

 

근데 이 변수를 여러 개 지정해야 할 일이 있다고 가정하자. 그때는 랜덤한 위치에 각각 저장하기보다는 한 곳에 나열해서 저장하는 게 효율적이지 않을까? 

 


 

이제 한 반에 영일(01)이부터 일오(15)까지 15명에 있다고 가정을 하고 출석을 부른다고 가정한다.

 

1. 변수 

- 변수와 변수는 서로 연관성이 없기 때문에 일일이 나열해서 출력해야 한다.

- 주소 값은 컴퓨터마다 다르다.(Random Access Memory!)

a = "영일"
b = "영이"
c = "영삼"
d = "영사"
e = "영오"
f = "영육"
g = "영칠"
h = "영팔"
i = "영구"
j = "일영"
k = "일일"
l = "일이"
m = "일삼"
n = "일사"
o = "일오"

print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
print(i)
print(j)
print(k)
print(l)
print(m)
print(n)
print(o)

 

2. 리스트(=배열)

- 변수와 달리 리스트는 나열이 되어있다. 1번 영일이가 저장된 공간 바로 옆칸에는 2번 영이의 공간이 위치한다.

- 이렇게 규칙적으로 나열되어있는 데이터는 반복문이라는 것으로 활용이 가능하다.(반복문은 곧 배운다)

arr = ["영일", "영이", "영삼", "영사", "영오", "영육", "영칠", "영팔", "영구", "일영", "일일", "일이", "일삼", "일사", "일오"]

for value in arr:
    print(value)
반응형

3. 인덱스

- 리스트는 규칙적이고 순서대로 나열되어있는 것이다. 1번 영일, 2번 영이와 같이.

- 즉 인덱스는 리스트의 번호를 나타낸다.

(책에서 목차는 영어로 Index. 우리가 1단원 2단원 등 나열하는 것과 같은 개념)

- 사람은 숫자를 1,2,3,4...로 세지만 컴퓨터는 0,1,2,3,4...로 세는 것이 다른 점이다.

  즉 "영일"이란 데이터는 1번째가 아닌 0번째 데이터이다.

- 인덱스 표현은 대괄호 사이에 인덱스 값이 존재한다. (예제 확인)

arr = ["영일", "영이", "영삼", "영사", "영오", "영육", "영칠", "영팔", "영구", "일영", "일일", "일이", "일삼", "일사", "일오"]

print(arr[0])
print(arr[2])
print(arr[5])

# 결과 : 영일, 영삼, 영육

 

4. 그 외 리스트 기능

  • 리스트 값 연산
    - 리스트는 변수를 나열한 것이라 했다. 리스트에 포함된 변수와 변수는 자료형에 따른 연산이 가능하다.
    (아래는 숫자형 변수와 숫자형 변수의 사칙연산)
arr = [1, 2, 3, 4, 5]
print(arr[0]+arr[3])

#결과 : 5

 

  • 리스트 연산
    리스트에 존재하는 값이 아닌 리스트 자체도 연산이 가능하다. 너무 많으니 점프투 파이썬으로 확인하자.
    (리스트 추가, 삭제, 수정은 필수 )
    https://wikidocs.net/14

 

  • n중 리스트
    - 리스트 중 가장 복잡하지만 원리만 안다면 쉽다.
    - 다음과 같이 리스트 안에 리스트가 있는 경우가 있다. (= 이중 리스트)
arr = [10, 20, [31, 32, 33], 40, 50]

 

- 그렇다면 인덱스는 다음과 같다.

arr = [10, 20, [31, 32, 33], 40, 50]

print(arr[0])
print(arr[1])
print(arr[2])
print(arr[3])
print(arr[4])

# 결과 : 10, 20, [31, 32, 33], 40, 50

- arr[2]의 데이터 값은 리스트[31, 32, 33]이다.

  그러면 arr[2]번에서 1번째 인덱스는 32이다. (인덱스는 0번부터!)

  그렇다면 arr[2][1]의 값은 32로 표현할 수 있다.


- 두 번 설명하자면, arr[2]를 A로 치환하자. A = [31, 32, 33]이 되고 A[0] = 31, A[1] = 32, A[2] = 33이다.

  다시 A를 arr[2]로 치환하면 arr[2][0] = 31, arr[2][1] = 32, arr[2][0] = 33이 된다.

 

arr = [10, 20, [31, 32, 33], 40, 50]

print(arr[2][0])
print(arr[2][1])
print(arr[2][2])

#결과 : 31, 32, 33

 

  • 문자열
    - 문자열도 리스트라 생각하면 쉽다. 문자들이 규칙적으로 모여 모여 문자열이 되는 것이다.
    - 위 리스트를 이해하였다면 충분히 이해할 것이다...
text = "Hello"
print(text[0])
print(text[4])

#결과 : H, o

 

  • 그 외는 점프 투 파이썬에서... https://wikidocs.net/14
    - C나 보통 언어들에선 불가능 하지만 파이썬에서는 여러 자료형을 같은 리스트에 할당이 가능하다
    - 슬라이싱 등


정승제는 말했다. 수학 문제를 푸는 게 수학을 아는 것이 아니다.

 

수학이론을 남에게 설명할 수 있어야 한다.

 

 

코딩은 이해가 끝이 아니다...

 

내가 생각하는 것을 직접 타이핑하면서 느끼는 게 중요하다... 

 

생각이 다가 아니고 실현이 가능해야 한다.

 

2022.07.08 - [프로그래밍/Python] - [파이썬 독학]6. 튜플(튜플과 리스트 차이)

 

[파이썬 독학]6. 튜플(튜플과 리스트 차이)

2022.07.07 - [프로그래밍/Python] - [파이썬 독학] 5. 변수와 리스트(feat 이중리스트) [파이썬 독학] 5. 변수와 리스트(feat 이중리스트) 2022.07.04 - [프로그래밍/Python] - [Python 독학] 4. 변수&연산 [Pyth..

park-duck.tistory.com

 

반응형

댓글