python) List Tuple Set Dictionary 클레스 File IO

 

 

 

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]:
[2, 11, 8, 15, 1, 14, 7, 1, 12, 1]
In [7]:
numList.sort()
numList
Out[7]:
[1, 1, 1, 2, 7, 8, 11, 12, 14, 15]
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)
 
huhu	010-2222-2222	huhu@gmail.com
shine	010-3333-3333	shine@gmail.com
yona	010-9570-xxxx	yona_sep21@gmail.com
neo	213-909-0001	neo@matrix.com
trinity	213-909-0003	trinity@matrix.com
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('스테틱')
 
101	Galaxy2000	30
오성그룹
스테틱
In [13]:
Product.company
Product.name
 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [13], in <module>
      1 Product.company
----> 2 Product.name

AttributeError: type object 'Product' has no attribute '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()
 
This is test file.
테스트 파일입니다.
In [29]:
#with 블럭을 벗어나면 자동으로 close()됨
with open("/Users/lucas/test/sample.txt",'r') as file:
    data=file.read()# 데이터 전체를 읽어 옴
    print(data)
 
This is test file.
테스트 파일입니다.
Comment