Variable&List

Variable


가장 기초적인 프로그래밍 문법 개념
데이터(값)을 저장하기 위한 메모리 공간의 프로그래밍상 이름

  • 프로그래밍에서는 변수는 값을 저장하는 장소
  • 변수는 메모리 주소를 가지고 있고 변수에 들어가는 메모리 주소에 할당됨

메모리와 변수

  • 변수: 프로그램에서 사용하기 위한 특정한 값을 저장하는 공간
  • 선언 되는 순간 메모리 특정영역에 물리적인 공간이 할당됨
  • 변수에는 값이 할당되고 해당 값은 메모리에 저장됭
  • A=8의 의미는 "A는 8이다"가 아닌 A라는 이름을 가진 메모리 주소에 8을 저장하라

기본 자료형

In [1]:
# integer로 선언
a=1
b=1
print(a,b)
print(type(a))
print(type(b))
1 1
<class 'int'>
<class 'int'>
In [2]:
# float형
a=1.5
b=3.0
print(type(a),type(b))
<class 'float'> <class 'float'>
In [3]:
# string형
a='first'
b='second'
print(type(a),type(b))
<class 'str'> <class 'str'>
In [4]:
# boolean형
a=True
b=False
print(type(a),type(b))
<class 'bool'> <class 'bool'>
  • 파이썬에서는 타입을 적어주지않아도 알아서 타입을 인식.
  • 코드 실행시점에 데이터의 Type을 결정하는 방법(Dynamic Typing)


연산자(Operator)와 피연산자(operand)

In [5]:
# 제곱 연산
a=5
a**3
Out[5]:
125
In [6]:
# 나머지 연산
10%3
Out[6]:
1
In [7]:
# 증가연산
a=2
a=a+1
print(a)
a+= 1
print(a)
3
4


데이터 형 변환

In [8]:
a=10
print(int(a))
print(float(a))
print(str(a))
10
10.0
10
In [9]:
a=10.7
b=10.3
# 정수형으로 변환
a=int(a)
b=int(b)
print(a)
print(b)
10
10
  • 실수형에서 정수형으로 형 변환시 소수점 이하 내림
In [10]:
a='76.3'        # a에문자열76.3을할당, ''은문자열을의미
b=float(a)      # a를실수형으로형변환후b에할당

print(a)
print(b)
76.3
76.3
In [11]:
print(a+b)  # 문자열과 숫자열의 덧셈이 불가능하여 에러 발생
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-884b36512831> in <module>
----> 1 print(a+b)  # 문자열과 숫자열의 덧셈이 불가능하여 에러 발생

TypeError: can only concatenate str (not "float") to str

type()

In [12]:
a=int(10.3)    # a는정수형으로10.3을할당
b=float(10.3)   # b는실수형으로10.3을할당
c=str(10.3)   # c는문자열으로10.3을할당

# 타입확인은 type함수 사용
print(type(a))
print(type(b))
print(type(c))
<class 'int'>
<class 'float'>
<class 'str'>


List & Array

  • 인덱싱(indexing)
  • 슬라이싱(slicing)
  • 리스트연산
  • 추가삭제
  • 메모리저장방식
  • 패킹과언패킹
  • 이차원리스트

인덱싱(Indexing)

  • list에 있는 값들은 주소(offset)를 가짐
  • 주소를 사용해 할당된 값을 호출
In [13]:
colors =['red','blue','green']
print(colors[0])# red
print(colors[2])# green
print(len(colors))# len은list의길이를반환
red
green
3

슬라이싱(Slicing)

  • list의 값들을 잘라서 쓰는 것이 슬라이싱
  • list의 주소 값을기반으로 부분 값을 반환
In [14]:
cities =['서울','부산','인천','대구','대전','광주','울산','수원']
print(cities[0:6]," AND ",cities[-9:])# a 번수의0부터5까지, -9부터끝까지
print(cities[:])# a변수의처음부터끝까지
print(cities[-50:50])# 범위를넘어갈경우자동으로최대범위를지정
print(cities[::2]," AND ",cities[::-1])# 2칸단위로, 역으로슬라이싱
['서울', '부산', '인천', '대구', '대전', '광주']  AND  ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
['서울', '인천', '대전', '울산']  AND  ['수원', '울산', '광주', '대전', '대구', '인천', '부산', '서울']

리스트의 연산

concatenation, is_in, 연산함수들

In [15]:
color =['red','blue','green']
color2 =['orange','black','white']
print(color +color2)# 두리스트합치기
print(len(color))# 리스트길이
color[0]='yellow'# 0번째리스트의값을변경
print(color *2)# color 리스트2회반복
['red', 'blue', 'green', 'orange', 'black', 'white']
3
['yellow', 'blue', 'green', 'yellow', 'blue', 'green']
In [16]:
'blue' in color2# 문자열‘blue‘가color2 존재여부반환
Out[16]:
False
In [17]:
total_color=color +color2
total_color
Out[17]:
['yellow', 'blue', 'green', 'orange', 'black', 'white']

append, extend, insert, remove, del 등활용

In [18]:
color.append("white") # 리스트에“white” 추가
color
Out[18]:
['yellow', 'blue', 'green', 'white']
In [19]:
color.extend(["black","purple"])# 리스트에새로운리스트추가
color
Out[19]:
['yellow', 'blue', 'green', 'white', 'black', 'purple']
In [20]:
color.insert(1,"orange")# 1번째주소에“orange” 추가
color
Out[20]:
['yellow', 'orange', 'blue', 'green', 'white', 'black', 'purple']
In [21]:
color.remove("white")# 리스트에“white” 삭제
color
Out[21]:
['yellow', 'orange', 'blue', 'green', 'black', 'purple']
In [22]:
del color[0]# 0번째주소리스트객체삭제
print(color)
['orange', 'blue', 'green', 'black', 'purple']

리스트 메모리 저장 방식

  • 파이썬은 해당 리스트 변수에는 리스트 주소값이 저장됨
In [23]:
a=[5,4,3,2,1]
b =[1,2,3,4,5]
b =a
print(b)
[5, 4, 3, 2, 1]
In [24]:
a.sort()
print(b)
[1, 2, 3, 4, 5]
In [25]:
b =[6,7,8,9,10]
print(a,b)
[1, 2, 3, 4, 5] [6, 7, 8, 9, 10]
In [26]:
b=a[:]
a[2]=999
print(a,b)
[1, 2, 999, 4, 5] [1, 2, 3, 4, 5]
  • 만약 복사를 하고 싶으면 전체 슬라이싱을 통해서 복사 가능.

패킹과 언패킹

  • 패킹: 한 변수에 여러 개의 데이터를 넣는 것
  • 언패킹: 한 변수의 데이터를 각각의 변수로 반환
In [27]:
t =[1,2,3]  #1,2,3을변수t에패킹
a ,b ,c =t  #t에있는값1, 2, 3 을변수a, b, c에언패킹
print(t,a,b,c)  # [1, 2, 3] 1 2 3
[1, 2, 3] 1 2 3

이차원 리스트

  • 리스트 안에 리스트를 만들어 행렬(Matrix) 생성
In [28]:
kor_score=[49,79,20,100,80]
math_score=[43,59,85,30,90]
eng_score=[49,79,48,60,100]
midterm_score=[kor_score,math_score,eng_score]
print(midterm_score)
print(midterm_score[0][2])
[[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
20

이차원 리스트를 복사하는 방법?

In [29]:
midterm_copy=midterm_score[:]
midterm_copy
Out[29]:
[[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
In [30]:
# 여기서 안에 있는 값을 바꾸게 되면
midterm_score[0][1]=99999
print(midterm_score)
print(midterm_copy)
[[49, 99999, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
[[49, 99999, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
  • 복사된 값도 바꾼것을 확인 할 수 있다.

이 문제를 해결하려면?

In [31]:
import copy
In [32]:
kor_score=[49,79,20,100,80]
math_score=[43,59,85,30,90]
eng_score=[49,79,48,60,100]
midterm_score=[kor_score,math_score,eng_score]
In [33]:
midterm_copy=copy.deepcopy(midterm_score)
In [34]:
midterm_score[0][0]=9999
print(midterm_score)
print(midterm_copy)
[[9999, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
[[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]

'AI > 이론' 카테고리의 다른 글

Numpy part II  (0) 2021.01.25
Numpy part I  (0) 2021.01.25
Python data handling  (0) 2021.01.22
File & Exception & Log Handling  (0) 2021.01.22
Module and Project  (0) 2021.01.21
Python Object Oriented Programming  (0) 2021.01.21
pythonic code  (0) 2021.01.20
python data structure  (0) 2021.01.20

+ Recent posts