728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

a=[10,20,30]
b={'ten','twenty','thirty'}
for val in zip(a,b):
    print(val)

 

str_list=['hello','world','python','rokcs']
int_tuple=(1,2,3)
int_list=[400,500,600,700,800]

my_iterator = zip(str_list, int_tuple, int_list)
list(my_iterator)

 

 

zip으로 묶여진 튜플들을 다시 풀어내는 방법

 

zip_lst = list(zip(str_list, int_list, int_tuple))
a,b,c = zip(*zip_lst)
print('a: {}, b: {}, c: {}'.format(a,b,c))

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행했다.

 

def product_set(set1,set2):
    res=set()
    for i in set1:
        for j in set2:
            res = res | {(i,j)}
    return res
A = {1,3}
B = {2,4}
AxB = product_set(A,B)
print('A= ',A)
print('B= ',B)
print('AxB= ',AxB)

SQL의 Cross Join과 동일하다. 데카르트의 곱

 

곱집합 함수를 이용한 집합의 세제곱 연산

def product_set(set1,set2):
    res=set()
    for i in set1:
        for j in set2:
            res = res | {(i,j)}
    return res
def exp(input_set, exponent):
    res=input_set
    for _ in range(exponent-1):
        res=product_set(res,input_set) #호출한 결과를 res에 누적하여 반환함
    return res
A = {1,3}
A3 = exp(A,3) #집합 A에 대하셔 거듭 제곱을 3회 수행함
print(A3)

 

이를 참고하여 주사위를 두번 던졌을 때 가지수를 구해보자

cases={1,2,3,4,5,6}
cases_2times = product_set(cases, cases)
cases_2times #주사위 두번던졌을 때 가지수

 

#주사위 2번 던졌을 때 set이라 36이 안나오고 11가지 밖에 없음
sum_set ={sum(tup) for tup in cases_2times}
sum_set

 

위 코드를 list로 변환해 보았다.

sum_set =[sum(tup) for tup in cases_2times]
len(sum_set)

 

주사위 3번 던졌을 때 경우의 수 구하기

def tuple_sum(tup):
    if isinstance(tup, int): #tup가 정수(int) 형이면 tup을 반환
        return tup
    else:
        accum=0
        for element in tup:
            accum += tuple_sum(element) #재귀적 호출, 자기 자신 호출
    return accum
def product_set(set1,set2):
    res=set()
    for i in set1:
        for j in set2:
            res = res | {(i,j)}
    return res
cases_3times = product_set(cases, cases_2times)
sums={tuple_sum(tup) for tup in cases_3times}
sums

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

s1 = {i for i in range(1,7)}
s1

 

s2 = {i for i in range(4,10)} #set comprehension
s2

 

합집합

 

교집합

 

차집합

 

두 집합이 서로소인지 확인하기 -> isdisjoint 사용하면 된다.

s1 = {1,2,3}
s2 = {10,20,30}

 

 

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

  • 리스트로부터 집합 만들기
days_list=['Mon', 'Tue','Wed','Thu','Fri','Sat','Sun']
days_set = set(days_list)
days_set

 

  • 튜플로부터 집합 만들기
fruts_tuple=('apple','orange','water melon')
fruits_set = set(fruts_tuple)
fruits_set

 

  • 문자열로부터 집합 만들기
h_str='hello'
h_set=set(h_str)
h_set

 

#set은 중복을 없앤다.

s={100,100,200,200,300,400}
s

 

s.add(500) #추가
s

 

s.discard(100) # 삭제
s

 

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 진행했다.

 

#튜플
t0=(10,20,30)
t0

 

t0+t0

 

튜플은 리스트와 똑같은데 차이점은 수정이 안된다. 읽어오기만 할 수 있다.

 

 

예제

def area_and_circle(radius):
    area = 3.14*radius**2
    circum = 2*3.14*radius
    return area, circum

type()을 이용해 형식을 살펴보니 tuple이다...

 

r=5
a,c=area_and_circle(r)
print('반지름 {}인 원의 면적의 둘래는 {},{}'.format(r,a,c))

 

반환 값을 하나(tuple)이고 반환받은 곳에서 unpacking 되어 하나씩 가져다 사용 가능하다.

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 진행했다.

 

딕셔너리 객체를 생성한다

person = {'이름':'홍길동','나이':26,'몸무게':87}
person #딕셔너리 객체 만들기

 

컬럼 값 가져오기

person['이름']
person.get('이름')

 

popitem()

person.popitem() #랜덤하게 key와 value를 삭제

clear()

person.clear() #빈객체 만들기
person

 


딕셔너리 객체가 아래의 사진인 상태에서 for문을 통해 key와 value의 값을 어떻게 불러오는지 확인해 보자

 

key = person.keys()
value=person.values()
item=person.items() #key와 value를 tuple로 반환
for i in value:
        print(i)

 

item은 key와 value 둘다 tuple로 반환한다.

for i in item:
        print(i)

 

key를 이용하여 key와 value를 반환하였다.

for key in person:
    print('{} : {}'.format(key, person[key]))

다른 방법도 있다!

for key,value in person.items():
    print('{} : {}'.format(key, person[key]))

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북으로 사용했다.

 

import numpy as np
import pandas as pd

arr10 = [[[26, 22, 12, 12, 22], [87, 11, 13, 17, 19], [12, 23, 34, 23, 17]],
         [[26+1, 22+5, 19, 112, 22], [817, 11, 413, 17, 19], [112, 23, 134, 523, 117]],
         [[26+2, 22+6, 111, 132, 22], [87, 101, 130, 17, 19], [12, 23, 64, 23, 117]],
         [[26+3, 22+7, 12, 121, 22], [87, 171, 163, 17, 19], [12, 23, 634, 23, 167]],
         [[26+4, 22+8, 12, 121, 22], [87, 311, 163, 17, 19], [12, 23, 434, 23, 107]]]
print(arr10)

 

형식을 확인한다.

#3차원 배열
npa = np.array(arr10)
np.shape(npa) #3행5열5장있는것

 

 #내가 푼 결과가 이것과 같아야 하므로 확인차 실행한다.

np.sum(arr10,axis=2)

 

def myF1(i):
    sum=0
    for j in i:
        sum+=j
    return sum
def myF(i):
    return list(map(myF1,i))
list(map(myF,arr10))

 

 

자세한 동작과정을 확인해 보기 위해 print문을 적용해 보았다.

 

728x90
반응형
728x90
반응형
list1 = [10, 20, 30, 40, 50]
list1 = list(map(lambda x: x*10,list1))
print(list1)

def myFunc(x):
    return x*12
list3= list(map(myFunc,list1)) #list1=[100, 200, 300, 400, 500]
print(list3)

myFunc 함수는 들어오는 값마다 12를 곱해준다. 이것을 map을 이용하여 list1의 값들을 myFunc 함수에 적용한다.

 

def myFuncBool(x):
    return x%8==0
list4 = list(filter(myFuncBool, list1))  #list1=[100, 200, 300, 400, 500]
print(list4)

 

myFunBool 함수는 8의 배수를 반환 한다. 이것을 filter를 이용하여 list1의 값들을 myFunBool 함수에 적용한다.

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북을 사용하였다.

 

list에 sort()를 이용해보자 sort는 정렬이다!

 

a_list는 [12, 56, 11, 34] 배열을 가지고 있다 sort()를 적용하면

 

 

a_list안에 있던 값들이 오름차순으로 정렬된 것을 확인할 수 있다.

 

여기서 index() 를 이용하면 몇번에 위치하는지 알 수 있는데

오름차순한 a_list에서 11은 0번째에 있으므로 0이 떴고

 

sort를 reverse로 하여 반대로 정렬하고 난 후 11의 값이 3번째에 있다는 것을 알려준다.

 

다음은 insert()를 이용하는데 insert는 몇번째에 어떤 값을 넣을지 지정할 수 있다.

 

 

여기서 pop()를 이용하면 끝에있는 값을 가져온다.

 

 

문제) pop을 이용하여 데이터를 역순으로 정렬하기

a_list = [12, 56, 11, 34]
result=[]
list=len(a_list)
for i in range(0, list):
    result.append(a_list.pop())
print(result)

 

문제) pop 대신 remove를 이용하여 마지막 데이터 삭제하기

a_list = [12, 56, 11, 34]
a_list.remove(a_list[-1])
print(a_list)

 

* 리스트의 내용 갱신하기 -> 각각 10을 곱한 값으로 갱신!

list1 = [10, 20, 30, 40, 50]
i=0
for n in list1:
    list1[i] = n*10
    i=i+1
print(list1)

문제 ) 위의 값을 list comprehension으로 바꿔보기

[i*10 for i in list1]

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북을 이용하였다. 차이는 print문이므로 파이참에 적용하려면 print를 붙여주면 된다!

 

멤버 연산자인 in, not in을 확인해 보자

 

a_list 문자열 생성

 

사진처럼 in 을 이용해 내가 찾고 싶은 값이 있으면 True, 없으면 False를 반환한다.

 

if 문을 이용하여 이 해당 값이 있을 경우 문자열 배열에 삭제하도록 해보자

 

12가 사라진 것을 확인할 수 있다.

 

문제 ) a_list에 있는 값과 b_list에 있는 값들 중 겹치는 값을 출력해보자

[10, 16]이 나오면 되고 방법은 2가지가 있다.

 

1)

result =[]
for i in a_list:
    for j in b_list:
        if(i==j):
            result.append(i)
print(result)

 

2)

c_list=[]
for i in b_list:
    if i in a_list:
        c_list.append(i)
print(c_list)

728x90
반응형

+ Recent posts