Set은 list의 친척입니다.
List와 마찬가지로 여러 다양한 타입의 요소(element)들을 저장할 수 있습니다.
하지만 list와 동일하다면 set가 있을 이유가 없겠죠. List와 다른점은 다음과 같습니다.
List와 다르게 요소들이 순서대로 저장되어 있지 않습니다. 즉 ordering이 없다. 그러므로 for 문에서 읽어들일때 요소들이 순서대로 나오는게 아니라 무작위 순서대로 나옵니다.
순서가 없으므로 indexing도 없습니다. 몇번째 요소를 읽어들이거나 할 수 없습니다.
동일한 값을 가지고 있는 요소가 1개 이상 존재 할 수 없습니다. 즉 중복된 값을 저장할 수 없습니다. 만일 새로 저장하려고 하는 요소와 동일한 값의 요소가 존재한다면 새로운 요소가 이 전 요소를 치환(replace)합니다.
set을 생성하는 법은 일반적으로 2가지가 있습니다. 중괄호 ({ }) 를 사용하는 방법과 set() 함수를 사용하는 방법 입니다.
set1 = {1, 2, 3}
set2 = set([1, 2, 3])
보시다시피 set() 함수를 사용해서 set를 만들기 위해서는 list를 parameter로 전달해야 합니다.
그러므로 일반적으로 set() 함수를 사용해서 set를 만드는 경우는 list를 set로 변환하고 싶을 때 사용합니다.
앞서 말했듯이 set에서는 중복된 값은 저장이 안됩니다. 그러므로 동일한 값이 1이상 있다면 맨 나중에 저장되는 요소만 남아있게 됩니다.
set1 = {1, 2, 3, 1}
print(set1)
{1, 2, 3}
set2 = set([1, 2, 3, 1])
print(set2)
{1, 2, 3}
Append 덧붙인다는 뜻을 가지고 있습니다.
List에는 어울리는 단어 입니다. 왜냐하면 list에서는 요소들이 순차적으로 더해지기 때문에 새로운 요소는 list 맨뒤에 덧붙여지기 때문입니다.
그에 비해 set는 요소들이 순차적으로 저장되지 않습니다. 그러므로 append라는 단어는 어울리지 않습니다.
그래서 set에서는 add 라는 함수를 사용해서 새로운 요소를 추가합니다.
my_set = {1, 2, 3}
my_set.add(4)
print(my_set)
{1, 2, 3, 4}
Set에서 요소를 삭제할때는 remove 함수를 사용해서 삭제 합니다.
my_set = {1, 2, 3}
my_set.remove(3)
print(my_set)
{1, 2}
Set에 어떠한 값이 이미 포함되어 있는지를 알아보는 것을 look up 이라고 합니다.
Set에서 look up을 하기 위해서는 in 키워드를 사용해야 합니다.
my_set = {1, 2, 3}
if 1 in my_set:
print("1 is in the set")
1 is in the setif 4 not in my_set:
print("4 is not in the set")
4 is not in the set
Set는 교집합과 합집합을 구할때 도 사용될 수 있습니다.
교집합은 & 키워드 혹은 intersection 함수를 사용하면 됩니다.
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}print(set1 & set2)
{4, 5, 6}print(set1.intersection(set2))
{4, 5, 6}
합집합은 | 키워드 혹은 union 함수를 사용하면 됩니다.
print(set1 | set2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
print(set1.union(set2))
{1, 2, 3, 4, 5, 6, 7, 8, 9}
Assignment
왼쪽 상단의 get_unique_numbers_count 함수를 구현해주세요.
get_unique_numbers_count 함수는 numbers 라는 parameter를 받습니다.
numbers는 list 입니다. Numbers의 고유 값들의 수를 리턴해주면 됩니다.예를 들어, 다음과 같은 input이 들어왔다면:
[1, 2, 1, 1, 3, 4, 5]
5를 리턴해주면 됩니다.