Search

반응형

안녕하세요. 신기한 연구소입니다.

파이썬 프로그래밍에서 사용하는 자료구조의 한 종류인 파이썬 Sets에 대해 알아볼게요.

프로그래머가 되고 싶다면 자료를 잘 다루는 게 중요합니다.

적정한 타입과 사이즈를 정해야 오류를 줄일 수 있거든요.

 

Sets 타입 (집합)

파이썬 Sets는 우선 정렬이 안되어 있으며 중복 값을 허용하지 않습니다.

우리말로 집합이라는 뜻인데..

데이터를 묶는다는 의미이며 묶은 데이터 집합끼리 데이터 처리를 할 수 있습니다.

 

파이썬 Set 자료형은 2가지 방식으로 생성합니다.

첫 번째 방법은 { }를 사용하는 방법입니다.

howToMakeSet1을 보시면 콤마로 구분된 데이터를 { }로 감싸고 있습니다.

 

생성한 set 형태로 조회는 되었습니다.

하지만 정렬이 만들 때와 다릅니다.

또한 'red'가 두 개인데 하나로 나옵니다. 

정렬되지도 않고 중복도 허용되지 않음을 확인했습니다.

 

두 번째 방법은 set()을 이용하는 방법입니다.

howToMakeSet2는 문자열로 만들었고,

howToMakeSet3는 튜플을 사용했는데 1개의 값이 있습니다.

 

결과는 역시 글자 하나를 값으로 만들면서 중복된 값은 제거하고 순서는 엉망이 되었네요. ㅎㅎ

튜플로 만들 때 ('helloworld',)로 만들어도 같은 값이 나옵니다.

 

하지만 튜플도 2개 이상의 값을 넣으면 각각 하나씩 set 집합으로 구성됩니다.

 

파이썬 set에서 list를 사용하면 값이 한 개라도 글자 단위로 분해하지 않고

그대로 set집합을 구성합니다.

 

howToMakeSet4와 howToMakeSet5의 결과를 확인해 보면 됩니다.

{'a', 'helloworld'}와 {'12345'}가 나왔습니다.

 

howToMakeSet6의 경우는 int 값을 넣었습니다.

set은 반복되는 객체가 아닌 int를 지원하지 않기에 오류가 발생합니다.

 

위 예제는 파이썬 set의 멤버십 테스트입니다.

set 집합 안에 해당 값이 있는지 테스트하는 구문입니다. 

in을 사용했습니다.

 

 

파이썬 set은 집합입니다.

그렇다면 합집합, 교집합, 마이너스 등 연산이 가능합니다.

 

교집합은 & 또는 intersection을 사용합니다. 양쪽에 다 있는 항목을 찾습니다.

합집합은 | 또는 union을 사용합니다. 두 집합을 다 합친 뒤 중복 값을 제거합니다.

차집합은 - 또는 difference를 사용합니다. 앞의 집합에서 뒤의 집합을 뺍니다.

역 교집합은 ^를 사용하며 양쪽에 다 있는 항목을 제외한 항목을 찾습니다.

 

'가나다라'로 파이썬 set 집합을 만들었습니다.

 add 함수를 사용해서 set 집합에 '바'를 추가할 수 있습니다.

결과를 보니 두 번째에 추가되었네요.

 

 remove 함수를 사용해서 '바'를 삭제할 수 있습니다.

 

update 함수로 '바사아'를 추가할 수 있습니다.

 

add와 update는 둘 다 set에 데이터를 추가할 수 있는데

add는 1개만, update는 여러 개를 동시에 추가할 수 있는 점이 다릅니다.

 

마지막으로 set을 이용해 빈 집합을 만드는 방법은

set()을 사용하면 됩니다. 

{}는 빈 집합이 아닙니다. 다음에 공부할 딕셔너리와 관계가 있답니다.

파이썬 set의 기능에 대해 알아봤습니다.

 

연말정산 신고를 하던 중 프로그램 오류가 발생했던 적이 있습니다.

업무팀에서 문의가 온 건데..

엑셀로 저장해서 합을 구하면 잘 나오는데

화면에서는 자꾸 다른 금액이 나오고 금액이 다르다고 진행이 안된다는 문의였습니다.

기존에 계속 문제없이 사용하던 프로그램이라 좀 의아했지만..

분명 잘못된 부분이 있기에 오류가 난 것입니다.

그래서 먼저 업무팀에 작년과 달라진 점을 물었습니다.

업무적으로 크게 달라진 건 없다고 하네요.

하지만 올해 금액이 다른 해에 비해 많다고 하더군요.

그 말을 듣는 순간 갑자기 생각나는 게 있었답니다.

바로 데이터 타입입니다.

금액 단위가 더 커지면서 혹시 사이즈 오보가 된 거 아닐까 확인하니

int로 되어 있더군요.

21억 4748만 3647 까지만 지원되는데 그 금액을 넘어버린 거였습니다.

지난해까지는 21억을 넘은 적이 없었던 거였고요. ㅎㅎ

그래서 사이즈를 long으로 변환해주니 오류 없이 잘 처리된 기억이 있습니다.

그래서 데이터 구조를 잘 이해하고 적절하게 사용하는 것은

개발하는데 중요한 역할을 합니다.

그래도 버그 없는 프로그램은 없어요.

유지보수팀이 필요한 이유이기도 하고요.

 

잘못된 정보나 수정이 필요하면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형
반응형

안녕하세요. 신기한 연구소입니다.

파이썬 프로그래밍에서 자료구조가 있습니다.

이전에 리스트(List)를 알아봤는데요.

이번 포스팅은 파이썬 튜플(Python Tuple)에 대해 알아볼게요.

 

 

파이썬 프로그래밍에서 사용하는 자료구조에 시퀀스 자료형이 있습니다.

리스트(list), 튜플(tuple), 레인지(range)가 있습니다.

인덱싱, 슬라이싱 연산이라는 공통된 성질도 있습니다.

그중 파이썬 튜플(Python Tuple)을 공부해 보겠습니다.

리스트와 다른 점은 어떤 것이 있는지도 살펴봅니다.

 

예제

 

결과

파이썬 튜플(Python Tuple)의 구조는 괄호 ( ) 안에 콤마로 데이터를 구분해서 만듭니다.

위 예제를 보면 a = 1로 할당 시 조회하면 당연히 1이 출력됩니다.

 

두 번째는 a = 1, 2, 3으로 콤마로 a에 할당했습니다.

결과를 보니 튜플(Tuple)로 만들어졌네요. (1, 2, 3) 이것이 바로 튜플입니다.

물론 처음부터 a = (1, 2, 3)으로 만들 수 있습니다.

 

a를 튜플(Tuple)로 만든 방식대로 b와 c도 만들었습니다.

b를 보면 데이터 형이 달라도 만들어지고

c를 보면 튜플(Tuple) 내 튜플과 리스트를 추가할 수 있네요.

오류 없이 잘 실행되었습니다.

 

파이썬 튜플(Python Tuple)이 인덱싱과 슬라이싱이 가능하다고 했습니다.

print(c[2])로 인덱스를 사용해서 데이터를 요청하니 해당 위치의 리스트가

조회되었습니다. 정말 간단하게 데이터 구조를 만들 수 있네요.

 

그럼 튜플(Tuple) 내의 리스트의 데이터 하나를 선택해서 출력했습니다.

먼저 리스트는 c 튜플의 인덱스로 2에 위치하고 있습니다.

c[2]로 하면 그 위치의 리스트가 출력됩니다.

 

그 리스트의 첫 번째 문자를 선택하고 싶다면 인덱스를 활용하면 됩니다.

c[2]의 [0]번째이니 c[2][0]으로 하면 된답니다.

결과는 잘 나왔습니다. 쉽죠?

 

위 예제를 보면 우리가 좀 전에 테스트했던 c[2][0]의 값을 변경하는 코딩입니다.

실행해 보니 'a'가 'k'로 잘 변경되었네요.

튜플(Tuple) 내 리스트를 수정했습니다.

 

그래서 튜플(Tuple) 내 리스트 값을 통째로 변경해봤습니다.

그런데 오류가 났습니다.

타입 에러로 튜플(Tuple) 객체는 값을 변경(할당) 할 수 없답니다.

이 전 코딩에서 튜플 내 리스트는  수정이 되었는데 어찌 된 일일까요?

 

튜플 내 리스트 내의 값을 변경하는 경우는 리스트의 값을 변경하는 것이기에 가능하고

튜플 내 리스트 전체를 변경하는 것은 튜플의 값을 변경하는 것이기에 오류가 난 겁니다.

튜플(Tuple)은 한 번 값이 정해지면 수정이 불가능하네요.

 

위 예제는 튜플(Tuple)을 만드는 방법 중

값이 없는 빈 튜플이나 1개인 경우에 대한 코딩입니다.

 

'값'으로 하거나 ('값')으로 해도 튜플이 만들어지지 않습니다.

방법은 ('값', )로 1개의 값 뒤에 콤마 하나만 넣어주면 된답니다.

 

이제 튜플(Tuple)에 값이 하나인 d를 값이 세 개인 e와 결합해서

새로운 튜플 f를 만들어봤습니다.

별거 없네요. ㅎㅎ

 

튜플 자체에 추가로 값을 넣을 수 없기 때문에

+ 연산자를 사용해서 새로운 튜플을 만들면 되겠네요.

그냥 d를 사용하고 싶다면 d = d + e로 하면 d에 e의 값들을 더해서 

기존 d는 사라지고 새로운 튜플로 만들어집니다.

 

이번은 빈 값 튜플을 시도해 봅니다.

당연히 e=''는 안 되겠지요? ㅎㅎ

그래서 e = ('')도 시도해 봤지만 결국 결과는 e=''와 같습니다.

 

값이 하나인 튜플을 만들 때처럼 따라 했는데.

결과는 비참하게 에러가 나네요.

 

다시 따라 해 봤습니다.

결과는 ('',)가 나왔네요. 빈 값 튜플이 맞을까요?

len을 통해서 개수를 확인해 보니 1이 나옵니다. 그럼 빈 값이 아니네요.

 

튜플의 빈 값은 e = ()로 하면 된답니다. 정말 쉽네요. ㅎㅎ

결과를 확인하고 len을 통해 개수를 확인하니 ()와 0 이 나옵니다.

성공했습니다.

 

튜플(Tuple) a, b, c를 이용해서 각 튜플을 새로운 e 튜플에 값으로 만드는 예제입니다.

이런 경우 값 a, b, c는 튜플 c에 패킹된 거라 합니다.

튜플 패킹(Tuple packing)이라 부릅니다.

파이썬 튜플(Python Tuple) 이 이래서 쉽다고 하는 듯합니다.

 

j, k, m에 위의 튜플 e를 할당했습니다.

그리고 결과를 보니 멋지네요.

j, k, m에 e의 각 값들이 튜플로 새로 만들어졌습니다.

 

튜플 언패킹(Tuple unpacking)이라고 하는데 튜플을 값 별로 분리해서 

지정된 변수에 튜플을 생성하게 할당하는 겁니다.

정말 쉽게 지정할 수 있네요.

 

주의할 점은 튜플 e의 값이 3개이기 때문이 언패킹에도 반드시 3개가 있어야 합니다.

지금까지 파이썬 튜플(Python Tuple)의 다양한 기능에 대해 알아봤습니다.

잘못된 정보나 수정이 필요하면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형