# 다중리스트 , 불변리스트(immutable list), set형태
다중리스트는 여러가지 형태로 나타낼 수 있습니다. 예를 들어 0을 3 x 3형태로 나타낸다면
a = [
[0 , 0, 0],
[0 , 0, 0],
[0 , 0, 0]
]
이게 첫번째 방법
b = [ [0] * 3 , [0] * 3 , [0] * 3 ]
두번째는 곱셈을 이용하여 나타낼 수 있고
c = [ [0] * 3 for i in range(3) ]
세번째는 반복문을 이용하여 나타낼 수 있습니다. 위의 3가지방법중 반복문을 이용하여 나타내는게 제일 편리합니다.
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
셋다 같은 결과가 실행됩니다.
# c의 3번째 그룹 2번째 순서에 데이터 5 대입
c[2][1] = 5
만약 위의 데이터에 0말고 다른 숫자를 넣고 싶다면 넣을 위치를 쓰면됩니다.[2] => 3번째 모임 , [1] => 2번째에 있는 값
그러면 값이 [0, 0, 0] [0, 0, 0] [0, 5, 0] 이렇게 나타납니다.
빙고판 만들기
1부터 25까지 랜덤으로 배치되는 5x5 빙고판을 만드세요
예시 문제입니다. 5 x 5 형태로 빙고판을 만드는데 랜덤으로 배치해야 합니다.
import random
bingo = [ [0] * 5 for i in range(5)]
# 반복 25번(1 ~ 25)
i = 0
while i <= 25 :
x = random.randint(0,4)
y = random.randint(0,4)
# print(f'{i} 를 ({x} , {y})에 집어넣습니다')
if bingo[x][y] == 0 :
bingo[x][y] = i
else :
i -= 1 # 재추첨 코드
i += 1
for i in bingo :
for j in i :
print(format(j , '5d') ,end = '\t')
print('\n')
해설입니다. 랜덤을 써야하기 때문에 import random을 씁니다. 그리고 나서 5 x 5 형태를 잡아줍니다.
그다음 while문을 써서 25번을 반복되게 해줍니다. x와 y는 가로세로 라 생각하면 됩니다.
이때 만약 x와y에 같은값이 들어가면 재추첨을 시켜줍니다.
그리고 실행해보면 25개의 숫자가 랜덤으로 들어가는 빙고판이 완성됩니다.
다음은 불변리스트입니다. 불변리스트는 데이터를 조회할때 많이씁니다. 형태는 대괄호가 아닌 그냥 괄호를 씁니다. [] => ()
불변리스트는 list 처럼 index에 의한 접근은 가능 , list와 같이 자를때에는 불변리스트 형태를 유지합니다.
# 검색 명령만 가능 = count() , index()검색명령 : count를 쓰고 그안에 숫자를 쓰면 쓴 숫자가 몇개있는지 알 수 있습니다.
index를 쓰면 쓴 숫자가 어느 위치에 있는지 알 수 있습니다.
불변리스트는 거의 쓰지 않으므로 별로 안쓰겠습니다.
다음은 set형태입니다. 중복이 불가하고 순서가 무시된느 list 라 할 수 있습니다. 전체 접근 속도를 최대한으로 올리기위한 저장소입니다.
형태는 또 다릅니다. 대괄호 , 괄호도아닌 중괄호를 씁니다. {}
set은 개별요소접근이 불가합니다. 하지만 전체접근은 가능합니다.
set에 추가하는 방법입니다. add => 단일추가 / update => 다중추가 두개로 나뉩니다.
로또 번호를 2주차 추첨하여 나온 모든 숫자를 화면에 출력
(1 ~ 45 사이의 정수 6개)
만약
1주차 11 , 13 , 27 , 31 , 34 , 43
2주차 15 , 27 , 30 , 34 , 43 , 44
결과 11 , 13 , 15 , 27 , 30 , 31 , 34 , 43 , 44
예시 문제입니다. 로또 문제인데요 1부터 45 사이 숫자중 6개씩 2번을 뽑고 결과는 두번뽑은 숫자를 한번에 출력하라는 문제입니다.
lotto = [i for i in range(1,46)]
import random
random.shuffle(lotto)
first = lotto[:6]
random.shuffle(lotto)
second = lotto[:6]
a = set(first)
a.update(second)
print(first)
print(second)
print(a)
해설입니다. 1부터 45까지 랜덤으로 숫자를 뽑기위해 반복문과 랜덤을 써주고 셔플도 써줍니다.(섞기위해)
그리고 전체를 나타내기 위해 다중추가를 써줍니다.
그리고 출력을 해보면 위의 예시처럼 나타나게 됩니다.
set에서는 합집합과 교집합 그리고 차집합을 나타낼 수 있습니다.
a = {1 , 3 , 5 , 7 , 9}
b = {2 , 4 , 5 , 7 , 8}
우선 a와 b를 이렇게 저장합니다.
print(a.union(b)) # 합집합(union)
print(a.intersection(b)) # 교집합(intersection)
print(a.difference(b)) # 차집합(difference)
print(b.difference(a)) # 차집합(difference)
** 원본에는 영향이 없음 !! **
합집합은 union , 교집합은 intersection , 차집합은 difference를 이용해 나타납니다.
위에 처럼 나타나면 우선 합집합은 a 와 b에 있는 값을 합해서 나타내주기 때문에 (중복된 숫자는 1번출력)
{1 , 2 , 3 , 4 , 5 , 7 , 8 , 9} 이렇게 나타납니다.
교집합은 a와 b에 둘다 있는 숫자만 나타냅니다. 따라서 {5 , 7}이 나타납니다.
마지막 차집합입니다. 만약 A - B이면 a에서 b의값을 모두 뺀 값이 나타납니다. 위에처럼 표현하면 각각 {1 , 3 , 9} / {8 , 2 , 4}
이렇게 나타나게 됩니다.
'Python' 카테고리의 다른 글
| Python_11Day (0) | 2019.02.27 |
|---|---|
| Python_10Day (0) | 2019.02.26 |
| Python_08Day (0) | 2019.02.22 |
| Python_07Day (0) | 2019.02.21 |
| Python_06Day (0) | 2019.02.20 |