본문 바로가기

Python

5. 리스트 , 튜플

1. 리스트 자료형

'''
리스트 자료형

CRUD - Create , Read, Update, Delete
리스트 [] #CRUD 다 됨 , 빈도 높음
튜플 () #Update의 부분추가는 되는데 일부 데이터 삭제가 안됨
딕셔너리 {키:값 ... } #빈도 높음
집합(set) {} # Read가 잘 안됨 , 값들이 중복되지 않음(수학과 똑같다.)
'''

# 생성1 Create - 초기값 지정 방식
mylist1 = [1,3.14, True, 'Hello world']
print(mylist1, '\n', len(mylist1)) #list 의 len은 리스트에 들어가는 집합 원소 개수
# 생성2 - 빈 리스트 생성 후 아이템 추가
# 리스트명.append(데이터), 리스트명.insert(위치인덱스, 데이터) : 위치 인덱스는 0부터 시작
mylist2 = []
print(mylist2, '길이 = ', len(mylist2)) #[] 길이 =  0
mylist2.append('사과')
mylist2.append('포도')
mylist2.append('무화과')
print(mylist2, '길이 = ', len(mylist2))  #결과 : ['사과', '포도', '무화과'] 길이 =  3
#이쪽에선 사과 포도 무화과 추가됐으므로 Update라 한다.

mylist2.insert( 0,'오렌지')
print(mylist2, '길이 = ', len(mylist2)) #['오렌지', '사과', '포도', '무화과'] 길이 =  4
mylist2.insert( 2,'파인애플')
print(mylist2, '길이 = ', len(mylist2)) #['오렌지', '사과', '파인애플', '포도', '무화과'] 길이 =  5

 

# Read - 인덱싱, 슬라이싱 가능 [위치인덱스], [start:end:step]
mylist = [1,3.14, True, 'Hello world', 'Python']
print('='*10)
print(mylist[0]) #첫번째 아이템 #1
print(mylist[4],mylist[-1]) #마지막 아이템 # Python Python
print(mylist[-1][0]) #마지막 아이템이 문자라면 첫번째 글자 #P ->마지막의 첫번째 글자 추출
#print(mylist[2],mylist[2][0]) #TypeError 왜냐면 Ture는 Bool이기 때문.
print(mylist[1:3]) #[3.14, True]
print(mylist[-2:])  #['Hello world', 'Python']
print(mylist[-2][-5:]) #world
print(mylist[::2]) #[1, True, 'Python'] # 홀수번째 아이템 출력
print(mylist[1::2]) #[3.14, 'Hello world'] #짝수번째 아이템 출력
print(mylist[::-1]) #['Python', 'Hello world', True, 3.14, 1] # 역순출력

 

#Delete
'''
리스트명.remove(데이타) : 데이타값을 이용한 삭제
리스트명.pop() : 마지막 데이타 값 삭제, 해당값 반환
리스트명.pop(인덱스) : 인덱스 위치에 해당하는 값이 삭제, 해당값 반환
리스트명.clear() : 데이타 모두 삭제. 빈리스트로 변경
del 리스트명 : 리스트 변수 삭제
'''
# 리스트명.remove(데이터값) -> 데이터값 생략 불가 -> 리스트에서 데이터값 삭제해라.
# 리스트명.pop()or pop(인덱스) : 인덱스 위치에 해당하는 데이터 삭제, 인덱스 생략시 리스트의 마지막 데이터 삭제. 
# 리스트명.clear() : 리스트안의 모든 데이터 삭제 ()안에 채워넣지 않는다. 즉, 빈 리스트로 만든다 =>[]
# del 리스트명  : 리스트 자체를 삭제시킴
city_list = ['제주', '서울', '부산', '대구', '대전', '공주', '마산', '세종']
city_list.remove('대구')    #인덱스로 입력하지 말고 데이터값으로 입력해야함.
print(city_list) #['제주', '서울', '부산', '대전', '공주', '마산', '세종']
city_list.pop(0) #인덱스로 입력하면 해당 데이터값 삭제됨
print(city_list) #['서울', '부산', '대전', '공주', '마산', '세종']
city_list.pop() #인덱스 생략하면 마지막 삭제
print(city_list) #['서울', '부산', '대전', '공주', '마산']
print(city_list.remove('공주')) #print()문 안에서 삭제 명령어를 적용하면 #None #pop은 한방에 가능
print(city_list) #['서울', '부산', '대전', '마산']
city_list.clear()
print(city_list) #[]
del city_list #리스트 자체 삭제
print(city_list) #NameError: name 'city_list' is not defined 에러나옴

 

#Quiz1
# 데이터를 입력받은 후 리스트에 추가하고 결과를 출력하여라.
# ( input() 이용, 리스트의 원소는 5개로 한다. )
# 좋아하는 음식은? 초밥
# 최근 본 영화는? 알라딘
# 좋아하는 가수는? BTS
# 좋아하는 숫자? 10
# 최근 여행지? 부산
# 당신에 관한 리스트 : ['초밥', '알라딘', 'BTS', 10, '부산' ]
#해결법
#1) 빈 리스트 생성
#2) 데이터 입력받아서 리스트의 데이터로 추가
#3) 리스트 출력
# mylist = []
# data = input('좋아하는 음식은?')
# mylist.append(data)
# data = input('최근 본 영화는?')
# mylist.append(data)
# data = input('좋아하는 가수는?')
# mylist.append(data)
# data = input('좋아하는 숫자?')
# mylist.append(data)
# data = input('최근 여행지?')
# mylist.append(data)
# print(f'당신에 관한 리스트 : {mylist}')

#or 아래 방법이 더 괜찮음.

# mylist = []
# data = input('좋아하는 음식은?')
# mylist.append(data)
# mylist.append(input('최근 본 영화는?'))
# mylist.append(input('좋아하는 가수는?'))
# mylist.append(input('좋아하는 숫자?'))
# mylist.append(input('최근 여행지?'))
# print(f'당신에 관한 리스트 : {mylist}')

#Quiz2
# 아래와 같이 리스트를 정의하고 다음과 같이 출력하여라.
# foods = ['사과','망고','치즈케이크','주스']
# 우리집 냉장고에는? ['사과', '망고', '치즈케이크', '주스']
# 동생이 사과 을/를 먹었다
# 우리집 냉장고에는? ['망고', '치즈케이크', '주스']
# 이모가 수박 을/를 사오셨다.
# 우리집 냉장고에는? ['망고', '치즈케이크', '주스', '수박']
# 동생 친구가 치즈케이크 , 수박 을/를 먹었다.
# 우리집 냉장고에는? ['망고', '주스']

foods = ['사과','망고','치즈케이크','주스']
print(f'동생이 {foods[0]} 을/를 먹었다.')
foods.remove(foods[0])
print(f'우리집 냉장고에는? {foods}')
item = '수박'
foods.append(item)
print(f' 이모가 {item}을/를 사오셨다.')
print(f'우리집 냉장고에는? {foods}')
print(f'동생 친구가 {foods.pop(1)} , {foods.pop(-1)}을/를 먹었다.')
print(f'우리집 냉장고에는? {foods}')

# Quiz3
# 태어난 년도를 입력받은 후 태어난 년도에 대한 띠를 출력한다
# 태어난 년도를 12로 나눈후 나머지를 구한다. 나머지에 따라서 띠를 출력한다.
# 띠 = 태어난년도%12
# 원숭이, 닭, 개, 돼지, 쥐, 소, 범, 토끼, 용, 뱀, 말, 양 (0 ........ 11)
# 출력 예시)
# 태어난 년도를 입력하세요? ... 2009
# 2009 년도 출생은 소띠입니다.

#1) 띠 리스트 만들기 
#2) 태어난 년도를 입력받은 후 정수형 형태로 변경 (int())
#3) 띠인덱스 = 태어난년도 % 12
#4) 띠리스트[띠인덱스] 해당 디에 대한 결과를 출력한다.


zodiac_list = ['원숭이', '닭', '개', '돼지', '쥐', '소', '범', '토끼', '용', '뱀', '말', '양']
birth_year = input('태어난 년도를 입력하세요? ... ')
idx = int(birth_year)%12
print(f'{birth_year}년도 출생은 {zodiac_list[idx]} 띠입니다.' )

 

# 중첩리스트 : 리스트안에 리스트가 데이터로 들어간 형태
# 인덱스 접근은? 리스트명[인덱스1][인덱스2]
mylist = [[0,1,2],[10,20,30],['python','oracle','정보처리']]
print(mylist) #[[0, 1, 2], [10, 20, 30], ['python', 'oracle', '정보처리']]
print(mylist[0]) #[0, 1, 2]
print(mylist[1][1]) #20
print(mylist[-1][-1]) #정보처리
print(mylist[-1][-1][-1]) #리

# 정의된 리스트를 이용해서 중첩 리스트 정의
kor = [100, 80, 85]
math = [55, 70, 35]
eng = [80, 80, 100]
python = [90, 70, 88]
class_list = [kor, math, eng, python]
print(class_list) #[[100, 80, 85], [55, 70, 35], [80, 80, 100], [90, 70, 88]]
#영어 점수의 총점 구하기
print(class_list[2][0],class_list[2][1],class_list[2][2]) #80 80 100
print('총점', class_list[2][0]+class_list[2][1]+class_list[2][2]) #총점 260
print(f'평균 : {(class_list[2][0]+class_list[2][1]+class_list[2][2])/3:.2f}') #평균 : 86.67

 

 

2. 튜플

"""
튜플
CRUD : Creat 가능, Read 가능, Update(데이터 추가만 가능) , D(데이터부분 삭제불가)(전체삭제만됨)
Create
튜플명 = ()
튜플명 = (데이터1, 데이터2 ...) # 괄호 생략가능
튜플명 = 데이터1, 데이터2, ..
튜플명 = (데이터1,) 
# 아이템 갯수가 1개인 경우 쉼표 사용

"""
mytuple1 = (1,2,3)
mytuple2 = 1,2,3
mytuple3 = ()
mytuple4 = ('python') #아이템 갯수가 1개일때는 마지막에 쉼표(,)로 마무리해야 튜플
mytuple5 = ('python',)
print(mytuple1, type(mytuple1),len(mytuple1)) #(1, 2, 3) <class 'tuple'> 3
print(mytuple2, type(mytuple2),len(mytuple2)) #(1, 2, 3) <class 'tuple'> 3
print(mytuple3, type(mytuple3),len(mytuple3)) #() <class 'tuple'> 0
print(mytuple4, type(mytuple4),len(mytuple4)) #python <class 'str'> 6 
print(mytuple5, type(mytuple5),len(mytuple5)) #('python',) <class 'tuple'> 1


#Read - 인덱싱, 슬라이싱 가능
mytuple = (10, 200, True, 'Python')
print(mytuple[2]) #True
print(mytuple[-1][1]) #y
print(mytuple[1:3]) #(200, True)
print(mytuple[::-1]) #('Python', True, 200, 10)


# Update - 값수정 X
# 데이터 추가는 += (변수1, 변수2, ...)
# Delete X (전체 삭제만 가능함)
mytuple = ()
print(mytuple, len(mytuple)) #() 0
mytuple += ('사과',) #,빼면 typeError 발생함.
print(mytuple, len(mytuple)) #('사과',) 1
mytuple += '배', '오렌지'
print(mytuple, len(mytuple)) #('사과', '배', '오렌지') 3
del mytuple #mytuple 튜플 삭제
print(mytuple) #NameError

 

# 튜플 변수 (named tuple)
# 튜플 구성 아이템에 변수를 설정하는 방식
# 튜플명 = (변수1,변수2 ...) = (데이터1, 데이터2 ...)
student_tuple = ( name, age, addr ) = ( '홍길동', 23, '부산')
print(student_tuple) #('홍길동', 23, '부산')
print(student_tuple[0],name) #홍길동 홍길동

# 혼합된 형태의 튜플 
# 중첩 튜플, 리스트안의 튜플, 튜플안의 리스트
mytuple1 = ((1, 10), (200, 40), ('python', 'oracle')) #튜플안의 튜플
mytuple2 = ([1, 10], [200, 40], ['python', 'oracle','sql']) #튜플안의 리스트
print( mytuple1, type(mytuple1), len(mytuple1)) #((1, 10), (200, 40), ('python', 'oracle')) <class 'tuple'> 3
print( mytuple2, type(mytuple2), len(mytuple2)) #([1, 10], [200, 40], ['python', 'oracle', 'sql']) <class 'tuple'> 3
print( mytuple2[-1], type(mytuple2[-1]), len(mytuple2[-1])) #['python', 'oracle', 'sql'] <class 'list'> 3
print( mytuple2[-1][-1], type(mytuple2[-1][-1])) #sql <class 'str'>

 

3. 캐스팅

"""
캐스팅 - 데이터형 강제 변환
tuple(리스트명) : 리스트 => 튜플
list(튜플명) : 튜플 => 리스트
str(튜플명) : 튜플 => 문자열
'문자'.join(튜플명) : 튜플 => 문자열, 튜플안의 데이터가 문자열이어야 한다.

"""

my_text = '가나다라마바사'
my_tuple = ('초밥', '알라딘', 'BTS', '해운대', '부산')
my_list = ['파이썬', '자바', 'DB']

#리스트 => 튜플 (중간에 내용 수정 못하게 할 때 사용 ), 자주 사용하는 경우는 아님
temp1 = tuple(my_list)
print(temp1, type(temp1)) #('파이썬', '자바', 'DB') <class 'tuple'>
# 튜플 => 리스트
temp2 = list(my_tuple)
print(temp2, type(temp2)) #['초밥', '알라딘', 'BTS', '해운대', '부산'] <class 'list'>
# 튜플 => 문자열
temp3 = str(my_tuple)
print(temp3, type(temp3),len(temp3)) #('초밥', '알라딘', 'BTS', '해운대', '부산') <class 'str'> 33
print(temp3[:10]) #('초밥', '알라
temp4 = ''.join(my_tuple)
print(temp4, type(temp4), len(temp4)) #초밥알라딘BTS해운대부산 <class 'str'> 13
temp4 = ','.join(my_tuple)
print(temp4, type(temp4), len(temp4)) #초밥,알라딘,BTS,해운대,부산 <class 'str'> 17

#문자열 => 리스트 => 튜플: 문자열.split( )이용
#문자열.split() : 공백을 기준으로 해서 리스트로 생성
#문자열.split(구분문자) : 구분문자를 기준으로 해서 리스트로 생성.
my_text1 = '가나다라마바사'
my_text2 = '가,나,다,라,마,바,사'
temp5 = my_text1.split()
temp6 = my_text2.split(',')
temp7 = tuple(my_text2.split(','))
print(temp5, type(temp5), len(temp5)) #['가나다라마바사'] <class 'list'> 1
print(temp6, type(temp6), len(temp6)) #['가', '나', '다', '라', '마', '바', '사'] <class 'list'> 7
print(temp7, type(temp7), len(temp7)) #('가', '나', '다', '라', '마', '바', '사') <class 'tuple'> 7

 

#Quiz2

'''
문제1 : 빈 리스트를 생성하는 코드는? b
A) my_list = ()
B) my_list = []
C) my_list = {}
D) my_list = list()



문제2 : 리스트 fruits = ['apple', 'banana', 'cherry']의 길이를 구하는 코드는? a
A) len(fruits)
B) fruits.size()
C) fruits.count()
D) count(fruits)



문제3: 리스트 colors = ['red']에 'green'을 추가하는 코드는? b
A) colors.add('green')
B) colors.append('green')
C) colors.insert('green')
D) colors.push('green')



문제4: 리스트 items = [1, 2, 3, 4, 5]에서 첫 세 개의 요소를 슬라이싱하는 코드는? d
A) items[:3]
B) items[0:3]
C) items[0:2]
D) A와 B 모두 정답



문제5: 리스트 data = [5, 3, 1, 4, 2]를 오름차순으로 정렬하는 코드는? a
A) data.sort()
B) data.sorted()
C) data.order()
D) A와 B 모두 정답
# 리스트명[::-1] - 역순배치,순서뒤집기 // 결과 : [2,4,1,3,5]
# 정렬 
# 리스트명.sort() : 오름차순 , 리스트명.sort( reverst = True) : 내림차순 // 원본 리스트 순서 변경
# 리스트명.reverse() : 원본 리스트 순서 변경, 내림차순 
# sorted(리스트명, ) : 생략해도되고 reverse=True 쓰면 내림차순 / 원본 리스트 적용 X


문제6: 리스트 animals = ['cat', 'dog', 'fish']에서 'dog'를 삭제하는 코드는? a
A) animals.remove('dog')
B) animals.pop('dog')
C) animals.delete('dog')
D) animals.erase('dog')

# remove(데이터값) 
# pop(데이터인덱스) : 데이터인덱스 생략시 마지막 위치 -1 // 프린트문 안에 쓰면 출력됨.
if pop 이용한 답 쓰려면 animals.pop(1)


문제7: 리스트 elements = ['a', 'b', 'c', 'd']에서 'c'의 인덱스를 찾는 코드는? a
A) index_c = elements.index('c')
B) index_c = elements.find_index('c')
C) index_c = elements.position('c')
D) index_c = elements.search('c')

#리스트명.index(데이터값) : 데이터 인덱스 반환(return)


문제8: 리스트 matrix = [[1, 2], [3, 4], [5, 6]]에서 4를 출력하는 코드는? b
A) value = matrix[1][0]
B) value = matrix[1][1]
C) value = matrix[0][1]
D) value = matrix[2][1]




문제9: 리스트 items = [1, 2, 3, 4, 5]의 요소 순서를 반전시키는 코드는? a
A) items.reverse()   ->한글 숫자 섞이면 오류 발생하기도 함
B) items.invert()
C) items.swap()
D) items.flip()





문제10: 
튜플 my_tuple = (1, 2, 3, 4)를 리스트로 변환한 후, 2를 삭제하고 다시 튜플로 변환하는 코드를 작성하세요.
(결과 : (1, 3, 4))
#내 풀이
my_tuple = (1, 2, 3, 4)
my_tuple = list(my_tuple)
my_tuple.remove(2)
my_tuple = tuple(my_tuple)
print(my_tuple)

#해설
my_tuple = (1, 2, 3, 4)
data_list = list(my_tuple)
data_list.remove(2)
my_tuple = tuple(data_list)
print(my_tuple)

문제11: 
리스트 words = ['Hello', 'World']를 공백으로 구분된 문자열로 변환하는 코드는? c
결과는 Hello World
A) result = words.join()
B) result = join(words)
C) result = ' '.join(words)
D) result = list(words)

# 리스트 => 문자열 , '구분문자'.join(문자열|리스트|튜플)



문제12: 
튜플 data = ('a', 'b', 'c')를 리스트로 변환한 후 각 요소를 '-'로 결합하여 문자열로 만드는 코드는?
(결과 : a-b-c)
#내풀이
data = ('a', 'b', 'c')
data = list(data)
result = '-'.join(data)
print(result)

#해설
data = ('a', 'b', 'c')
data_list = list(data)
result_string = '-'.join(data_list)
print(result_string)
'''

'Python' 카테고리의 다른 글

7. 제어문 ( if, elif, else)  (1) 2024.10.02
6. 딕셔너리, 세트  (0) 2024.10.02
4. 문자열 다루기  (3) 2024.10.02
3. 연산자  (0) 2024.10.02
2. 자료형과 변수  (1) 2024.10.02