BASEMENT
Python 2주차 - 2 본문
2차원 리스트
2차원 리스트 : 1차원 리스트를 여러 개 연결한 것. 인덱스를 2개 사용 -> [ ][ ]
ex) points = [[90,70,100], [85,99,94], [87,89,98]]
# 예제 - 중첩루프를 사용하여 3행 4열의 2차원 리스트 생성
list1 = []
list2 = []
value = 1
for i in range(3):
for j in range(4):
list1.append(value)
value += 1
list2.append(list1)
list1 = []
for i in range(3):
for j in range(4):
print("%3d" % list2[i][j], end='')
print()
차원이 다른 2차원 리스트 -> 리스트의 자료형, 길이가 달라도 가능함
points = [[90,70,100], [85,99], ['a','b','c','d']]
cf) 2차원 튜플 -> 리스트와 사용법 동일
items = ((1,2,3), (4,5,6,7))
print(items[0][1])
print()
for i in range(len(items)):
for j in range(len(items[i])):
print("%3d" % items[i][j], end='')
print()
리스트 복사
1. 얕은 복사(Shallow Copy)
instance를 1개만 생성함
a = [1,2,3,4,5]
b = a
a[1] = 2000
b[2] = 3000
print(a) # [1,2000,3000,4,5]
print(b) # [1,2000,3000,4,5]
2. 깊은 복사(Deep Copy)
instance를 각각 생성함
[:] 또는 copy() 함수 사용
a = [1,2,3,4,5]
b = a[:] # b = a.copy()
a[1] = 2000
b[2] = 3000
print(a) # [1,2000,3,4,5]
print(b) # [1,2,3000,4,5]
네임드 튜플
파이썬 포쥰 모듈 중 collections에 있는 데이터 타입
일반 튜플과 유사하나, 튜플 항목에 대해 인덱스 번호 및 이름으로 참조 가능
import collections
튜플이름 = collections.namedtuple(튜플이름, 튜플항목에 부여하는 이름)
# 문자열, 집합형 자료형만 가능
import collections
person = collections.namedtuple('pesron', ['name','age','grade'])
p = person('고려',20,'1학년')
print(p[0])
print(p.name)
# p.grade = '2학년' -> 일반튜플처럼 삭제 및 수정 불가
컴프리헨션 (Comprehension: 함축)
값이 순차적인 리스트 생성을 한 줄 코드로 만드는 간단한 방법
리스트 변수이름 = [수식 또는 항목 for 항목 in range() <if 조건식>]
# 기본 코드
items = []
for i in range(1,6):
items.append(i)
print(items)
# 컴프리헨션 코드
items = [i for i in range(1,6)]
print(items)
# 컴프리헨션 코드로 1~5 사이의 랜덤 정수를 발생시켜 2차원 리스트 작성
import random as rand
matrixA = [[rand.randrange(1,6,1) for _ in range(0,2)] for _ in range(0,2)]
print(matrixA) # 열표현 # 행표현
Enumerate
문자열, 리스트 또는 튜플 등의 순서가 있는 자료형에 인덱스를 부여하는 메서드
인덱스 값과 항목 값의 튜플 반환
ex) [10,20,30] -> (0,10), (1,20), (2,30)
편의성과 가독성을 위해 인덱스와 값을 동시에 사용할 때 유용
accidents = [2,5,3,8,9,10]
for accident in enumerate(accidents):
print(accident)
a = list(enumerate(accidents)) # enumerate한 데이터들을 list로 변환
enumerate 사용법
- 인덱스의 시작 번호를 별도로 부여하여 사용 가능
- enumerate(리스트, start=인덱스 번호)
- 리스트 자체의 시작 인덱스 번호는 0으로 불변
accidents = [2,5,3,8,9,10]
for i, accident in enumerate(accidents, start=1):
print(i, accidnet)
print("accidents :: ", accidents[i-1]) # start=1 이지만 원래 인덱스 번호는 0이므로 i-1
zip
동시에 다수의 집합형 자료에 접근 가능
zip(집합1, 집합2, ...) -> 집합1 이 키값
리스트의 요소 개수가 다를 경우 -> 작은 개수에 맞춤
zip 타입은 키값 및 인덱스 번호 사용 불가
foods = ["떡볶이","짜장면","라면","피자","맥주]
sides = ["오뎅","단무지","김치"]
for food, side in zip(foods, sides):
print(food, "-->", side)
# zip_c = zip(foods, sides); print(zip_c[0]); -> error
# zip_C = zip(foods, sides); print(zip_c['떡볶이']) -> error
두 리스트를 튜플 또는 딕셔너리로 묶을 경우에도 zip 함수 사용
foods = ["떡볶이","짜장면","라면","피자","맥주"]
sides = ["오뎅","단무지","김치"]
zip_tuple = zip(sides, foods)
print(type(zip_tuple)) # <class 'zip'>
for i in zip_tuple:
print(i)
for i, j in zip_tuple:
print(i, ':', j)
zip으로 묶인 자료형에 키값 및 인덱스 번호 등을 사용하려면 list, tuple, dictionary로 변환
# list or tuple 로 변환
foods = ["떡볶이","짜장면","라면","피자","맥주"]
sides = ["오뎅","단무지","김치"]
zip_tuple = list(zip(sides, foods)) # tuple(zip(sides,foods))
print(type(zip_tuple))
for i in range(len(zip_tuple)):
print(zip_tuple[i])
# dictionary로 변환
foods = ["떡볶이","짜장면","라면","피자","맥주"]
sides = ["오뎅","단무지","김치"]
zip_dic = dict(zip(sides, foods))
print(type(zip_dic))
for i in zip_dic: # i : 키값
print(zip_dic[i]) # 결과 : items(key+value)
cf) zip으로 묶인 데이터를 dictionary로 변환 시 집합형 자료의 개수는 2개로 제한 (key, value값 때문)
zip_dict = dict(zip(sides, foods, drinks)) # 오류
zip_list = list(zip(foods,drinks)) # 두 자료를 zip하여 list로 변환 후
zip_dict = dict(zip(sides,zip_list)) # 남은 자료와 list를 zip 하면 가능
분리용으로도 사용 -> * (unpacking) 연산자
iems = [('coffee','cake'), ('sushi','miso'), ('movie','popcorn')]
item1, item2 = zip(*items) # * : unpacking 연산자
print(f'item1 : {item1}, item2 : {item2}')
print()
jelly = {'origin':'south korea', 'gradient':['sugar','pineapple','kiwi'], 'date':'2020.05.07'}
intro, content = zip(*jelly.items())
print(f'intro : {intro}, content : {content}')
'Programming > Python' 카테고리의 다른 글
Python 3주차 - 2 (0) | 2020.07.12 |
---|---|
Python 3주차 - 1 (0) | 2020.07.12 |
Python 2주차 - 1 (0) | 2020.07.11 |
Python 1주차 - 2 (0) | 2020.07.09 |
Python 1주차 - 1 (1) | 2020.07.05 |