Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

BASEMENT

Python 2주차 - 2 본문

Programming/Python

Python 2주차 - 2

2_34 2020. 7. 11. 16:48

 

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
Comments