In [ ]:
nums=[]
nums.append(1)
nums # [1]
nums=[1,2,3,4,5]
nums # [1,2,3,4,5]
nums.reverse() # 실행시 아무것도 나오지 않는다.메소드 리턴값이 없다.
n1 = nums.reverse() # 담을수 없다
n1 # None return None=null
# reverse() 는 원본으로 다시 저장
nums # [1,2,3,4,5]
nums.reverse()
nums # [5,4,34,2,1]
# 리슨트의 원본을 보존하고 사본을 생성해서 훼손을 허용하는 경우
# 얕은 복사(Shallow Copy)
nums2 = nums #참조 복사이므로 reverse()하면 데이터가 뒤집어짐
nums2 # [5,4,34,2,1]
nums2.reverse()
nums2 # [1,2,3,4,5]
nums # [1,2,3,4,5]
# 깊은 복사(Deep Copy)
nums # [1,2,3,4,5]
num3=nums.copy()
num3 # [1,2,3,4,5]
num3.reverse()
num3 # [5,4,3,2,1] 사본만 조작됨
nums # [1,2,3,4,5] 원본은 영향 없음
In [ ]:
num = [1,2,3,4,5]
i=num.index((2)) # 2 value를 이용 index를 찾는다.
num[i] # 2
6 in num # False
3 in num # Trur
num.index(1) # 0
try:
num.index(10) # err 없으면 에러가 뜬다. ValueError 에외처리 필요
except ValueError as ve: # as ve <- 에러 메세지가 담긴다!
print("해당항목은 데이터에 존재하지 않슴니다 err:",ve)
In [ ]:
# C : append()
# R : num[0]
# U : num[0]=10
# R : num.remove(10)m del num[0]
# F : num.index(10), 10 in num
In [ ]:
# 리스트에 Friend 오브젝트를 5개 저장
# 특정 친구 정보를 찾는 기능을 작성해 보세요
# 이름, 전화, 이메일
In [1]:
class Friend:
def __init__(self,name,phone,email):
self.name=name
self.phone=phone
self.email=email
def __str__(self):
return f'{self.name}\t{self.phone}\t{self.email}'
def __eq__(self,inputBuddy):
return (self.name==inputBuddy)
In [ ]:
friendList=[]
In [ ]:
def add():
buddyInfo=input('이름 전화번호 이메일:')
[name,phone,email]=buddyInfo.split()
newBuddy=Friend(name,phone,email)
friendList.append(newBuddy)
print("친구 하나를 획득했습니다^^...")
def find():
keyName=input("정보를 찾을 친구의 이름 입력")
for b in friendList:
if b.__eq__(keyName):
print(b.name,b.phone,b.email)
In [ ]:
while True:
cmd=input('메뉴 선택: 추가(a),찾기(f) 종료(x)')
if cmd=='a':
add()
if cmd=='f':
find()
if cmd=='x':
break
print("프로그램 종료")
In [ ]:
class Friend:
def __init__(self,name,phone,email=None):
self.name=name
self.phone=phone
self.email=email
def __str__(self):
return f'{self.name}\t{self.phone}\t{self.email}'
def __eq__(self,other):
if (self.name==other.name)and(self.phone==other.phone):
return True
else:
return False
In [ ]:
frList=[]
frList.append(Friend('Oracle','333','oracle@matrix.com'))
frList.append(Friend('Neo','333','neo@matrix.com'))
frList.append(Friend('Trinity','333','trinity@matrix.com'))
frList.append(Friend('Morpheus','333','morpheus@matrix.com'))
frList.append(Friend('Niobe','333','niobe@matrix.com'))
In [ ]:
neo = Friend('Neo','333')
frList.index(neo) # 1
In [ ]:
neo in frList # True
In [ ]:
frList[0].__str__() # Smith 010 @
print(frList[0])
frList[0:3]
In [ ]:
# Tuple
# 리스트의 특징을 가지고 있ㄴ음
# 값에 대한 수정/삭제 안됨
In [ ]:
numList=[1,2,3]
numTuple=(1,2,3)
print(numTuple, numList)
numList[0]=5
numList # [5,2,3]
numTuple[0]=5 # 값 재할당 불가
In [ ]:
t=() # 빈 tuple
type(t) # tuple
t = (1)
type(t) # int
t = (1,)
type(t) # tuple
t=(1,2,3)
t=1,2,3
type(t)
t1=1,2,3
t2=4,5
t3=t1+t2
len(t3) # 5
t3[0] # 1
In [ ]:
# Set : 집합, 원소가 번호로 관리되는 자료구조가 아님
# 데이터 중복저장 불가
In [ ]:
num_set={1,2,3,3,3}
num_set # {1,2,3}
num_set.add(4) # 리스트 안됨
num_set # {1,2,3,4}
num_set.update([3,4,5,6]) # 리스트 가능
num_set
In [ ]:
# 중복되지 않도록 1~20 정수 10개르 추출해보세요
import random as r
setNums=set()
for i in range(10):
no=r.randint(1,21)
setNums.add(no)
while True:
no=r.randint(1,21)
setNums.add(no)
if len(setNums)==10:
break
setNums
numSet=set()
while len(numSet)<10:
numSet.add(r.randrange(1,21))
numSet
In [ ]:
# Dictionaty {key:value, key:value, .....}
emp={'num':11,'name':'Scott'}
emp['phone'] = '213.777.1234' # 동적 데이터 추가
emp
In [ ]:
'num' in emp
emp['num'] #11
emp['num']=12
emp
In [ ]:
emp.get('num') #12
In [ ]:
emp['email'] # 해당키가 없으면 keyError
In [ ]:
emp.get('email') # 해당 키가 없어도 에러는 발생치 않음
# return 없음 None
emp.get('email','해당키는 없습니다')
In [ ]:
emp['num']=15
emp
In [ ]:
emp.update({'num':20})
emp
In [ ]:
emp.keys() # 모든 키 추출
In [ ]:
for key in emp.keys():
print(emp[key])
In [ ]:
emp.values()
In [ ]:
emp.items() # tuple return
In [ ]:
for item in emp.items():
print(item)
for k,v in emp.items():
print(k,v)
Dictionary 루핑 방법¶
- for key in dic:
- for key in dic.keys():
- for key in dic.values():
- for key in dic.items(): tuple return
- for (k,v) in dic.items():
- for k,v in dic.items():
In [ ]:
emp.pop('phone') # 키를 이용한 아이템 삭제
emp.popitem() # 마지막 아이템 삭제
emp
In [ ]:
# 추가
emp['name']='King' # 없으면 추가 있으면 수정
emp.update({'phone':'213-777-7777'}) # 없으면 추가 있으면 수정ㅠ
emp
In [ ]:
# 값 출력 (읽어오기)
emp['num'] # 20
emp.keys()
emp.values()
emp.get('num')
emp.items()
emp.copy()
In [ ]:
# 삭제
# emp.clear() # 모든 값 삭제
# emp.pop('num') # 키로 지정된 값이 삭제됨
# emp.popitem() # 맨 뒤의 값 삭제
# del emp['emp']
In [ ]:
# 키보드에서 번호 이름을 입력 받고
# Dictionary 에 저장하여 여러 멤버의 정보를 리스트에 저장한다
# 데이터가 채워진 리스트로부터 특정 멤버 정보를 검색하여 화면에 표시한다
# dic={} 매번 만들어 줘야지 override 되지 않고 add 된다!
list=[]
while True:
kbd = input('번호: 이름: (검색:f, 종료:x)')
if kbd=='x':
break
if kbd=='f':
keyName=input('검색할 회원명:')
for mem in list:
if keyName==mem['name']:
print(mem)
else:
dic={}
[num,name]=kbd.split()
dic.update({'num':num,'name':name})
print(dic,"추가 합니다.")
list.append(dic)
In [ ]:
memList=[]
while len(memList)<5:
indata=input('번호 이름:')
[num,name]=indata.split()
mem_dic={}
mem_dic['num']=num
mem_dic['name']=name
memList.append(mem_dic)
memList
keyword=input('검색 번호 이름:')
[num,name]=keyword.split()
for dic in memList:
if (dic['num']==num)and(dic['name']==name):
print(dic)
In [ ]:
# List, Tuple, Set, Dictionary
# 키보드에서 입력된 번호, 이름을 딕셔너리 형태로 리턴하는 함수 작성
In [ ]:
def serialize():
kbd=input("번호: 이름:")
num,name=kbd.split()
return {'num':num,'name':name}
In [ ]:
# 번호 이름을 저장한 딕셔너리를 파라미터로 받아서 리스트에 저장해주는 함수 작성
# Mem 객체로 변환하여 리스트에 저장
# 3인 정보를 저장한 후에 리스트에 저장된 데이터를 화면에 표시
class Member():
def __init__(self,num,name):
self.num=num
self.name=name
memList = []
def addMem(memDic={}):
num=memDic['num']
name=memDic['name']
inputMem=Member(num,name)
memList.append(memDic)
print('저장완료')
def printMem():
for mem in memList:
print(mem)
In [ ]:
addMem(serialize())
In [ ]:
printMem()
In [ ]:
memList=[]
#def addMem(memDic={}):#memDic 자료형을 Dictoinary 명시
# Mem 객체 생성 Mem(memDic['mem'],memDic['name'])
# memList.append()
In [ ]:
memberList=[]
In [ ]:
class Mem:
def __init__(self,num,name):
self.num=num
self.name=name
def __str__(self):
return f'{self.num}\t{self.name}'
In [ ]:
def addMem(memDic={}): # 자료형이 Dictonary가 아니면 ERROR
mem=Mem(memDic['num'],memDic['name'])
memberList.append(mem)
In [ ]:
addMem({'num':11,'name':'Scott'})
addMem({'num':12,'name':'Blake'})
addMem({'num':13,'name':'Jone'})
In [ ]:
for m in memberList:
print(m)
In [ ]:
# mthod(1,2,3,4)
# mthod(1)
# mthod(1,2,3,4,5,6,7)
# 임의의 갯수의 아규먼트를 받을 수 있는 홤수 선언
ㅠdef addData(*data): #*data -> 데이터가 몇개가 오던지 Tuple로 받는다
print(data)
addData(1)
addData(1,2,3,4)
In [ ]:
test={'mems':['smith','ward','king']}
test['mems']
In [ ]:
def saveData(**data):
print(data)
saveData(num=10)
saveData(num=5,name='Peter')
In [ ]:
numList=[4,5,1,3,2]
print(numList)
In [ ]:
numList.sort() # 오름차순 정렬
numList
In [ ]:
# 무작위 수 10개를 추출하여 정렬해보세요
import random as r
numberList=[]
while len(numberList)<10:
num=r.randrange(0,99)
numberList.append(num)
numberList.sort()
numberList
In [6]:
import random
numList=[]
for i in range(10):
numList.append(random.randrange(0,20))
numList
Out[6]:
In [7]:
numList.sort()
numList
Out[7]:
In [ ]:
# Mem 객테를 다수개 저장한 리스트를 정렬하려고 안다면?
#memList.sort(key=lambda m: m.num)
memList=[]
memList.append(Mem(11,"Neo"))
memList.append(Mem(12,"Morpheus"))
memList.append(Mem(13,"Trinity"))
In [ ]:
for m in memList:
print(m)
In [ ]:
memList.sort(key=lambda m: m.name) #이름으로 정렬
for m in memList:
print(m)
In [3]:
# Friend 객체를 5개 저장한 리스트를 생성하고
# 전화번호 순으로 정렬해 보세요
friendList=[]
friendList.append(Friend("yona","010-9570-xxxx","yona_sep21@gmail.com"))
friendList.append(Friend("huhu","010-2222-2222","huhu@gmail.com"))
friendList.append(Friend("shine","010-3333-3333","shine@gmail.com"))
friendList.append(Friend("neo","213-909-0001","neo@matrix.com"))
friendList.append(Friend("trinity","213-909-0003","trinity@matrix.com"))
In [4]:
friendList.sort(key=lambda f: f.phone)
for f in friendList:
# print(f'{f.name}\t{f.phone}\t{f.email}\t') 클래스의 __str__(toString)
print(f)
In [22]:
# 클래스 멤버, 인스턴스 멤버
class Product:
company="오성그룹" # 클래스 변수
def __init__(self,num,name,price):
self.num=num
self.name=name
self.price=price
def __str__(self):
return f'{self.num}\t{self.name}\t{self.price}'
@classmethod # 클래스 변수를 대상으로 로직 수행
def printCom(cls):
#print(cls.company)
print(Product.company)
@staticmethod # 클레스 변수에 접근 불가, 주로 파라미터를 받아서 처리
def util(data):
print(data)
In [23]:
p1=Product(101,'Galaxy2000',30)
p2=Product(102,'Apple9499',333)
print(p1)
Product.printCom()
Product.util('스테틱')
In [13]:
Product.company
Product.name
In [ ]:
class ChildCls(ParentCls):
def __init__(self):
super().__init__(param1,param2)
In [27]:
#파일 다루기
file=open("/Users/lucas/test/sample.txt",'r') #'r' -> mode=read
data=file.read()
print(data)
file.close()
In [29]:
#with 블럭을 벗어나면 자동으로 close()됨
with open("/Users/lucas/test/sample.txt",'r') as file:
data=file.read()# 데이터 전체를 읽어 옴
print(data)
'자바~하둡' 카테고리의 다른 글
python) Thread pickle socket (0) | 2022.02.24 |
---|---|
python) File IO _CRUD (2) | 2022.02.23 |
python) List_CRUD (feat. jupyter notebook) (0) | 2022.02.21 |
python) 마크다운, 자료형, 연산자, 형변환, 제어문, 모듈, 튜플, 예외처리,Sliceing (feat. jupyter notebook) (0) | 2022.02.20 |
<dependency> JPA프레임워크& Pageable (0) | 2022.02.15 |