튜플(Tuple)

  • tuple은 list과 거의 같다.
  • indexing, slicing 모두 동일하게 사용 가능하다. 원소들도 자유롭게 사용 가능하다.
  • 거의 같은데, 다른 점이 딱 2가지 있다.

1) 리스트는 []를 사용하고, 튜플은 ()을 사용한다.

 

2) 리스트는 생성 후에 변경이 가능하고(mutable) 튜플은 생성 후에 변경이 불가능하다.(immutable)

 

 

Mutable : 생성된 이후에 변경(assignment)이 자유롭게 가능한 data type.

e.g) List, dict, set

 

immutable : 생성된 이후에 변경이 불가능한 data type

e.g.) int, float, string, tuple, frozense

 

성능적인 이슈 -> 변경되지는 않는 그 자체로 장점이 생김.

 

프로그래밍적인 이슈 -> 데이터 수정 자체를 하지 않는 경우 실수를 방지할 수 있다.

 

# 1, 2를 원소로 가지는 tuple을 생성해 봅니다.
 
t = (1,2)
t, type(t)
t1 = ()
t1, type(t1)
t2 = ('a''b', ('a''b'))
t2

t3= (1"a", (3,3,14), [ "JiWoong",3])
t3, type(t3)

t[0] = 3 # 튜플의 원소를 변경해보자.
 

* 튜플은 변경할 수 없다.

 

# 그럼 tuple의 더하기, 곱하기는 어떻게 될까?
t = (12)
t2 = (34)
t + t2

t2 * 3

 

len(t * 3)

집합(Set)

  • 집합 자료형은 정말 말그대로 수학에서 배우는 집합 그 자체이다.
  • 수학에서는 집합을 {}로 표시했지만, 파이썬에서는 안타까운 이유로 {}를 사용하긴 하는데 그냥 사용할 수는 없다. 왜냐면 사전(Dictionary) 자료형도 {}를 사용하기 때문이다. 이에 대해서는 뒤에 자세히 배운다.
  • 공집합을 생성할 때는 반드시 set()으로 생성해야 한다. {}로 생성하면 빈 사전이 생성된다.

e.g. {1, 2, 3} : 집합, {'a':1, 'b':2} : 사전

  • 집합의 연산자인 교집합, 합집합, 차집합을 모두 지원한다.
  • 집합의 특징이 2가지 있는데, 이 특징이 리스트와의 차이점이라 사용한다. 첫번째 특징이 집합 자료형을 사용하는 주된 이유이다.

1) 집합은 원소의 중복을 허용하지 않는다. 즉, 원소의 종류를 나타내기 좋다.

2) 집합은 원소의 순서가 존재하지 않는다. 즉, 원소의 index가 없다.

 

# 1, 2, 3을 원소로 가지는 집합을 만들어 봅시다.
s = {3,2,1}
s , type(s)
s1 = {}
s2 = set ()
s1, type(s1), type(s2)
s[1# 2가 나올것 같지만... indexing 이 안됨.

* 집합은 순서가 없다.

 

s1 = {12345}
s2 = {34567}
# s1과 s2의 교집합
s1 & s2

s1.intersection(s2) # s1과 s2의 자리를 바꿔서 당연히 같다.

# s1과 s2의 합집합
s1|s2
s1 + s2

* 합집합은 + 로 연산 할 수 없다.

 

s1.union(s2)
# s1과 s2의 차집합
s1 - s2
s2 - s1 # 당연히 다르다.

* 근데 차집합은 -로 가능 ...

 

L = [1122233334444456115]
print(set(L))
print(type(set(L))) #  type conversion
print(list(L))
print(type(list(L)))
print(tuple(L))
print(type(tuple(L)))

* set , list, tuple 차이점 . 집합은 중복 허용 X, 리스트 튜플은 같음 . 수정 되냐 안되냐 차이 !

 

#리스트 L 에 있는 서로다른 원소의 개수는?
 
set을 사용해 연산할 수 있다!
len(set(L))

집합에 원소 하나 추가하기 add()

 

s = set()
s.add(2)
s

집합에 여러 원소 추가하기 update()

s = {123}
s.update({45})  # sequence 가능.
s

집합에서 원소 제거하기 remove()

s.remove(3)
s
복사했습니다!