Language/Python

231114 Python_자료형, 튜플(tuple), dictionary, 집합(set), bool(참,거짓), 조건제어문(if), 반복문(for, while)

잇꼬 2023. 11. 20. 18:16
728x90
반응형
SMALL
x = 100
y = 100.0
z = 'python'


■ Python 자료형 (ex) 보고서용)
1. list ( PL/SQL 1차원배열 )
- 데이터 목록을 다루는 자료형
- 1차원 배열, 서로 다른 데이터 타입을 가질 수 있는 자료형
- 중첩할 수 있다.
- 작성 :  []
- list()

x1 = []
type(x1)

x2 = list()
type(x2)

x = [10, 20, 30]
x 
type(x)


PL/SQL count 
# 리스트 변수에 입력된 값의 수

len(x)


# 인덱싱(indexing)

x[0]
x[1]
x[2]
x[-1]
x[-2]
x[-3]


# 슬리이싱(slicing)

x[0:2]
x[1:]
x[:-1]

 

PL/SQL index by 요소번호 
# list 값 수정 (바로 적용)

x[0] = 100
x[1:3] = [200, 300]
x


# 변수명.append() : 리스트 값 추가 

x.append(400)
x[3]


# 기존 리스트 변수에 다른 리스트 변수를 이어 붙이는 함수 (바로 적용)

y = [600, 700]
x.extend(y)
x
y


x[4]
# 인덱스를 이용해서 새로운 값을 입력하는 함수 (바로 적용)

x = []
x.insert(4, 500)
x

 


# 서로 다른 리스트 변수를 이어 붙이는 방법 (미리보기)

z = [800, 900, 1000]
w = x + z # 오버로딩



# 리스트 변수에 있는 값 중에 마지막 값을 제거하는 방법 

w[:-1] #미리보기
del w[-1] # 리스트에 특정한 인덱스 값을 제거(바로적용)
w


# 인덱스를 이용해서 새로운 값을 입력하는 함수 (바로적용)

x = []
x.insert(4, 500)
x


# 서로 다른 리스트 변수를 이어 붙이는 방법(미리보기)

z = [800, 900, 1000]
w = x + z # 오버로딩


# 리스트 변수에 있는 값 중에 마지막 값을 제거하는 방법 

w[:-1] #미리보기
del w[-1] # 리스트에 특정한 인덱스 값을 제거(바로적용)
w.pop() # 리스트 변수에 있는 값 중에 마지막 값을 제거하는 방법(바로적용) ex)책상위에 책제거하는 방법


# 특정한 인덱스에 있는 값을 제거하는 방법(바로 적용) 

del w[2] # PL/SQL DEL 했을 경우 ROW가 비워있다. PYTHON의 경우에는 다른 값을 채워져 있다.
w.pop(2)
w

subject = ['SQL', 'PL/SQL', 'SQL', 'PYTHON', 'LINUX', 'SQL']
len(subject)
subject.count('SQL')

변수명.count(값) : 리스트 안에 있는 값의 수를 리턴하는 함수


# 리스트 변수 안에 값을 찾아 위치값을 리턴하는 함수, 없으면 오류발생

index(찾을값, 시작위치인덱스(0 기본값))
# 오류발생
# subject.find('SQL') # 리스트 변수에서는 find 함수를 사용할 수 없다.
subject.index('SQL') # 있다면 처음으로 나오는 위치정보 출력
subject.index('SQL', 0) # 기본값
subject.index('SQL', 1)
subject.index('SQL', 3)
subject.index('SQL', 6)


# del 변수명 : 리스트 변수에 있는 값을 찾아 제거하는 방법

subject = ['SQL', 'PL/SQL', 'SQL', 'PYTHON', 'LINUX', 'SQL']

del subject[subject.index('SQL')]
del subject[subject.index('SQL')]
del subject[subject.index('SQL')]
subject


변수명.pop() 리스트 변수에 있는 값을 찾아 제거하는 방법

subject = ['SQL', 'PL/SQL', 'SQL', 'PYTHON', 'LINUX', 'SQL']

subject.pop(subject.index('SQL'))
subject.pop(subject.index('SQL'))
subject.pop(subject.index('SQL'))
subject


변수명.remove() 리스트 변수에 있는 값을 찾아 제거하는 방법

subject = ['SQL', 'PL/SQL', 'SQL', 'PYTHON', 'LINUX', 'SQL']
subject.remove('SQL')
subject.remove('SQL')
subject.remove('SQL')
subject


# 중첩리스트 

x = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
len(x)
type(x)
type(x[0])

len(x[3])
type(x[3]) #  ['a', 'b', 'c']
type(x[3][0])

x[3]
x[3][0]
x[3][1]
x[3][2]
x[3][0:2]

x[3].append('d')
x[3].pop()
x.append(6)
x.pop()
x

x[3][0] = x[3][0].upper()
x[3][1] = 'B'
x


# 리스트 변수 값을 지우는 함수

x.clear()
x
x.append(1)
x.append(2)

dir()
id(x) # 메모리 주소, 변수=임시메모리

del x # 변수 삭제
dir()


# PL/SQL ORDER BY절 asc, desc
# 리스트 변수 안에 값을 기준으로 오름차순 정렬 (바로 적용)

x = [1,5,2,4,3]
x.sort()
x


x.sort(reverse=False) 기본값

# 리스트 변수 안에 값을 기준으로 내름차순 정렬 (바로 적용)

x = [1,5,2,4,3]
x.sort(reverse=True)
x


# 리스트 변수 안에 값을 기준으로 오름차순 정렬(미리보기)

x = [1,5,2,4,3]
sorted(x)
x
y = sorted(x)
y


# 리스트 변수 안에 값을 기준으로 내름차순 정렬(미리보기)

x = [1,5,2,4,3]
sorted(x, reverse=True)
x
y = sorted(x, reverse=True)
y


# 리스트 변수 안에 값을 역순으로 정렬(미리보기)

x = [1,5,2,4,3]
x[::-1]


# 리스트 변수 안에 값을 역순으로 정렬(바로적용)

x = [1,5,2,4,3]
x.reverse() # 역순
x

13//2
13%2
divmod(13, 2)
type(divmod(13, 2))



2. tuple(튜플) 
- 리스트 자료형과 유사하다.
리스트와 차이점 : 추가, 수정, 삭제 불가
- 리스트 변수로 사용하고 튜플은 상수처럼 사용한다.
- 변수는 변하는 값들을 사용하고 상수는 한 번 입력받은 값만 사용해야 한다. 
- 중첩할 수 있다. 
- 서로 다른 데이터 타입을 가질 수 있다.
- 출력(console) : ()
- 바로 적용하는 함수는 오류발생. 미리보기용 함수는 가능

lst = ()
type(lst)

tuple_1 = ()
type(tuple_1)

tuple_2 = (10, 20 ,30)
type(tuple_2)

tuple_3 = 10, 20, 30
tuple_3
type(tuple_3)

x = (10)
x
type(x) #int

y = (10, )
y
type(y) #tuple 타입
len(y)

x = ('a', 'b', ('ab', 'bc') )
x
x[0]
x[1]
x[2]
x[2][0]
x[2][1]

x = ('a', 'b', (1, 2) )
x
x[0]
x[1]
type(x[2])
type(x[2][0])
type(x[2][1])
type(x)

x = (1,2,3)
y = (4,5,6)


# 여러 튜플을 하나로 결합하는 방법

z = x + y
z
type(z)


# 오류발생 

x.extend(y) #추가 불가, 새로운 값 불가
z[0] = 10 # 수정 불가
del z[0] # 삭제 불가
z.pop()
z.remove(1)
z.append(7) # 추가 불가
z.sort() # 정렬불가

 

sorted(z) # 정렬은 미리보기
type(sorted(z))
sorted(z, reverse=True)

z.reverse() # 오류발생, 역순
z[::-1] # 튜플에서 역순으로 출력하는 방법

z.index(1)
z.index(5)
z.count(1)



# 변수 한번에 적용(tuple)

x = 1,2,3
one, two, three = x
one
two
three
type(x)


# 변수 한번에 적용(list)

y = [1,2,3]
one, two, three = y
one
two
three
type(y)

one, two = y[0:2]



3. dictionary
- key, value 값을 가지는 자료형 
- 출력(console) : {}
- {key1:value1, key2:value2, ... keyn:valuen}

dic = {}
type(dic)

dic = {'이름':'홍길동', '전화번호':'010-1000-0001', '주소':'서울'}
dic
dic.keys()
dic.values()
dic.items()

dba ={"db":"oracle", "개발자":"sql", "성능":"sql튜닝"}
dba['db']


# 없는 데이터로 오류발생

dba['관리']



# key, value 추가

dba['관리'] = "백업&복구"


# 수정

dba['관리'] = ["객체관리", "유저관리", "메모리관리", "스토리지관리", "백업&복구"]
dba

dba['관리']


# 변수명.get() :  key 유무 판단

dba.get('관리')

dba['진단'] # key 가 없으면 오류
dba.get('진단') # key 가 없으면 None(null) 리턴한다.


# key 유무

'개발자' in dba.keys()
'진단' in dba.keys()


 # value 유무

'sql' in dba.values()
'plsql' in dba.values()

'객체관리' in dba.values() # false 
["객체관리", "유저관리", "메모리관리", "스토리지관리", "백업&복구"] in dba.values() # list 형태
'객체관리' in dba['관리']


# list로 형변환

v = dba.values()
type(v)
list(v)
type(list(v))

list(dba.values())
list(dba.keys())
list(dba.items())


4. 집합(set) : 미리보기 
- 리스트와 비슷하다
- 단, 인덱스가 없다. 
- 유니크한 값, 중복을 허용하지 않는다. 유일한 값만 저장
- {}
- set()

s = {1, 1, 1, 1, 2, 3, 4, 2, 5, 5}
s
type(s)


# 오류발생 

s[0] # 집합 자료형은 인덱스가 없기 때문에 

lst = [1,1,1,1,2,3,4,2,3,5,5]
lst
lst.count(1)
lst.count(2)
set(lst) # 집합 자료형으로 변환 미리보기

tuple_1 = [1,1,1,1,2,3,4,2,3,5,5]
z = set(tuple_1)
z

x = [1,2,3,6]
y = [1,2,3,4,5]
x.extend(y) # PL/SQL UNION ALL 
x
set(x)


# 합집합 : 중복값 출력

x = [1,2,3,6]
y = [1,2,3,4,5]
x.union(y) # 오류발생 , union 함수는 집합 자료형에서 사용하는 함수
set(x).union(set(y)) # list자료형

x = {1,2,3,6}
y = {1,2,3,4,5}
x.union(y) #set 자료형
y.union(x)
x|y # union = | 같은 기능


# 교집합

x.intersection(y)
y.intersection(x)
x&y


# 차집합

x.difference(y)
x - y
y.difference(x)
y - x


# 대칭차집합(symmetric difference) : 중복값제거한 값
# PL/SQL NOT EXISTS

(x-y) | (y-x)
(x-y).union(y-x)
x.symmetric_difference(y)
x^y


# 서로소집합(disjoint set) : 두 집합에 고통된 원소가 없는 집합

{1,2,3}.isdisjoint({1,2,3})
{1,2,3}.isdisjoint({4,5,6})


# 부분집합(subset) :⊂ 부분집합

x = {1,2,3}
y = {1,3}


# y ⊂ x 이면 집합 y는 x의 부분집합이다.

y <= x
y.issubset(x)

x <= y
x.issubset(y)


# 상위집합인지 확인하는 함수

x.issuperset(y)


# 오류발생 

x[0] # 집합은 인덱스를 사용할 수 없다.


# 집합에 있는 원소를 삭제

x.remove(1)


# 원소 추가

x.add(5)


# 여러개 원소 추가

x.update([6,7,8])


# 집합에서는 수정 불가. 즉 삭제하고 추가하면 된다.

5. bool 
- 참(True), 거짓(False) 를 나타내는 자료형

x = True
y = False

type(x)
type(y)



# 조건제어문에서 True 표현 방법

1
bool(1)
bool(100)
bool(-1)
bool("홍길동")
bool("python")
bool([1,2,3])
bool((1,2,3))
bool({1,2,3})
not 0  # 0 = True
not None


# 조건제어문에서 False 표현방법

bool(0)
bool(None)
bool([])
bool({})
bool(())
bool('')
bool("")
not 1
not -100



■ 파이썬 변수 복제 주의

x = [1,2,3]
y = x # 복제,  x변수와 y변수는 동일한 메모리 공간을 사용한다.(메모리 절약)
x[0] = 10 # 문제점: y변수에 영향을 준다.
x
y

id(x) # 2378948673152
id(y) # 2378948673152

x = [1,2,3]
z = x[:] # 변수를 복제할 때 슬라이싱을 이용해서 복제하면 틀린 메모리공간을 사용한다. 
id(x) # 2378951396288
id(z) # 2378951530944

x[0] = 10
x
z

import copy

x = [1,2,3]
w = copy.deepcopy(x) # 변수를 복제할 때 슬라이싱을 이용해서 복제하면 틀린 메모리공간을 사용한다. 
id(x) # 2378951534208
id(w) # 2378951539392


■ 조건제어문 : if문

if 조건문:
True 일 때 수행하는 문장
if 조건문:
True 일 때 수행하는 문장
else:
False 일 때 수행하는 문장
if 조건문1:
조건문1 True을 수행하는 문장
elif 조건문2:
조건문2 True을 수행하는 문장
elif 조건문3:
조건문3 True을 수행하는 문장
else: 
기본값: 조건에 걸리는 부분이 없을 경우 수행하는 부분
f 10:
    print('오늘 하루도 많이 웃자!!')

if True:
    print('오늘 하루도 많이 웃자!!')

if 'oracle':
    print('오늘 하루도 많이 웃자!!')

if False:
    print('오늘 하루도 많이 웃자!')
else:
    print('내일도 많이 웃자')

x = 10
if x == 10:
    print('오늘 하루도 {}배 행복하자'.format(x))
    
x = 20
if x == 10:
    print('오늘 하루도 {}배 행복하자'.format(x))
else:
    print('오늘 하루도 {}배 행복하자'.format(x))
    
x = 12

if x > 10 or x%2 == 0:
    print('참')
else:
    print('거짓')


■ 변수의 빈 문자열 비교 

num = ''


# 검색할 때

num == ''
num == ""

num == None # 빈 문자열을 None으로 비교하면 False 

x = None
x
type(x)

x == None
x == '' # None으로 있는 변수를 빈문자열로 비교하면 False
x == "" # None으로 있는 변수를 빈문자열로 비교하면 False


# isnumeric() : 문자값이 숫자형 모습인지 체크하는 함수

x = 1
type(x)
x.isnumeric()
 
x = '1'
type(x)
x.isnumeric()


# isinstance : 변수의 타입을 체크하는 함수

x = 1
isinstance(x, int)
isinstance(x, float)
isinstance(x, str)

x = 1.2
isinstance(x, int)
isinstance(x, float)
isinstance(x, str)

x = True
isinstance(x, int)
isinstance(x, float)
isinstance(x, str)
isinstance(x, bool)

x = False
isinstance(x, int)
isinstance(x, float)
isinstance(x, str)
isinstance(x, bool)


# None(null, 서로 다른 type) 계산

sal = 1000
comm = None


# 오류발생, comm 이 None 이여서 

sal * 12 + comm

if comm == None: 
    annual = sal * 12
else:
    annual = sal * 12 + comm

if comm is None: # is null
    annual = sal * 12
else:
    annual = sal * 12 + comm

print(annual)


# 변수 = 참값 if 조건 else 거짓

annual = sal * 12 if comm == None else sal * 12 + comm
print(annual)

annual = sal * 12 if comm is None else sal * 12 + comm
print(annual)


■ 반복문
1. while문 : 조건이 True 인 동안에 반복을 수행한다.

While 조건문:
반복 수행할 문장
i = 1
while i <= 10:
    print(i)
    i = i + 1

i = 1
while i <= 10:
    print(i)
    i += 1


# continue문 : continue 문을 만나는 순간 다음 반복을 수행한다.

i = 0
while i < 10:
    i += 1
    if i % 2 == 0:
        continue
    print(i)


break문 : 반복문 종료하는 문

i = 0 
while True:
    if i == 0:
        i = 1
    elif i > 10:
        break # PL/SQL exit문
    
    print(i)
    i += 2
728x90
반응형
LIST