DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Set in Python (3)

Buy Me a Coffee

*Memo:

  • My post explains a set and the set with copy.
  • My post explains set functions (1).

difference() can return the zero or more elements which the set has but *others don't have as shown below:

*Memos:

  • The 1st arguments are *others(Optional-Default:()-Type:Iterable):
    • Don't use any keywords like *others=, others=, etc.
  • - also does difference() but - doesn't support the combination of a set and list or tuple.
  • difference() creates a copy while difference_update() doesn't.
A = {10, 20, 30, 40}
B = {10, 30, 50}
C = {30, 40}

print(A.difference(B))    # {40, 20}
print(A.difference(C))    # {10, 20}
print(A.difference(B, C)) # {20}
print(A.difference())     # {40, 10, 20, 30}

print(A - B)     # {40, 20}
print(A - C)     # {10, 20}
print(A - B - C) # {20}
print(A)         # {40, 10, 20, 30}
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30, 40} # set
B = [10, 30, 50]     # list
C = (30, 40)         # tuple

print(A.difference(B))    # {40, 20}
print(A.difference(C))    # {10, 20}
print(A.difference(B, C)) # {20}
print(A.difference())     # {40, 10, 20, 30}
Enter fullscreen mode Exit fullscreen mode

difference_update() can return the zero or more elements which the set has but *others don't have as shown below:

*Memo:

  • The 1st arguments are *others(Optional-Default:()-Type:Iterable):
    • Don't use any keywords like *others=, others=, etc.
  • -= with or without | also does difference_update() but -= and | don't support the combination of a set and list or tuple.
  • difference_update() doesn't create a copy while difference() does.
A = {10, 20, 30, 40}
B = {10, 30, 50}
C = {30, 40}

A.difference_update(B)
print(A)
# {20, 40}

A.difference_update(C)
print(A)
# {20}

A.difference_update(B, C)
print(A)
# {20}

A.difference_update()
print(A)
# {20}
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30, 40} # set
B = [10, 30, 50]     # list
C = (30, 40)         # tuple

A.difference_update(B)
print(A)
# {20, 40}

A.difference_update(C)
print(A)
# {20}

A.difference_update(B, C)
print(A)
# {20}

A.difference_update()
print(A)
# {20}
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30, 40}
B = {10, 30, 50}
C = {30, 40}

A -= B
print(A)
# {20, 40}

A -= C
print(A)
# {40}

A -= B | C
print(A)
# {40}
Enter fullscreen mode Exit fullscreen mode

symmetric_difference() can return the zero or more elements which the set has but other doesn't have or which the set doesn't have but other has as shown below:

*Memo:

  • The 1st argument is other(Required-Type:Iterable):
    • Don't use other=.
  • ^ also does symmetric_difference() but ^ doesn't support the combination of a set and list or tuple.
  • symmetric_difference() creates a copy while symmetric_difference_update() doesn't.
A = {10, 20, 30, 40}
B = {10, 30, 50}
C = {30, 40}

print(A.symmetric_difference(B)) # {40, 50, 20}
print(A.symmetric_difference(C)) # {10, 20}

print(A ^ B) # {40, 50, 20}
print(A ^ C) # {10, 20}
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30, 40} # set
B = [10, 30, 50]     # list
C = (30, 40)         # tuple

print(A.symmetric_difference(B)) # {40, 50, 20}
print(A.symmetric_difference(C)) # {10, 20}
Enter fullscreen mode Exit fullscreen mode

symmetric_difference_update() can return the zero or more elements which the set has but other doesn't have or which the set doesn't have but other has as shown below:

*Memo:

  • The 1st argument is other(Required-Type:Iterable):
    • Don't use other=.
  • ^= also does symmetric_difference_update() but ^= doesn't support the combination of a set and list or tuple.
  • symmetric_difference_update() doesn't create a copy while symmetric_difference() does.
A = {10, 20, 30, 40}
B = {10, 30, 50}
C = {30, 40}

A.symmetric_difference_update(B)
print(A)
# {40, 50, 20}

A.symmetric_difference_update(C)
print(A)
# {50, 20, 30}
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30, 40} # set
B = [10, 30, 50]     # list
C = (30, 40)         # tuple

A.symmetric_difference_update(B)
print(A)
# {40, 50, 20}

A.symmetric_difference_update(C)
print(A)
# {50, 20, 30}
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30, 40}
B = {10, 30, 50}
C = {30, 40}

A ^= B
print(A)
# {40, 50, 20}

A ^= C
print(A)
# {50, 20, 30}
Enter fullscreen mode Exit fullscreen mode

isdisjoint() can check if the set and other don't have any common elements as shown below:

*Memo:

  • The 1st argument is other(Required-Type:Iterable):
    • Don't use other=.
A = {10, 20, 30}
B = {40, 50}
C = {30, 40}

print(A.isdisjoint(B)) # True
print(A.isdisjoint(C)) # False
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30} # set
B = [40, 50]     # list
C = (30, 40)     # tuple

print(A.isdisjoint(B)) # True
print(A.isdisjoint(C)) # False
Enter fullscreen mode Exit fullscreen mode

issubset() can check if every element in the set is in other as shown below:

*Memo:

  • The 1st argument is other(Required-Type:Iterable):
    • Don't use other=.
  • <= also does issubset() but <= doesn't support the combination of a set and list, tuple or iterator.
A = {10, 20, 30}
B = {10, 20, 30, 40}
C = {10, 20, 30}
D = {10, 20}

print(A.issubset(B)) # True
print(A.issubset(C)) # True
print(A.issubset(D)) # False
print(A <= B) # True
print(A <= C) # True
print(A <= D) # False
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30}     # set
B = [10, 20, 30, 40] # list
C = (10, 20, 30)     # tuple
D = iter([10, 20])   # iterator

print(A.issubset(B)) # True
print(A.issubset(C)) # True
print(A.issubset(D)) # False
Enter fullscreen mode Exit fullscreen mode

issuperset() can check if every element in other is in the set as shown below:

*Memo:

  • The 1st argument is other(Optional-Type:Iterable):
    • Don't use other=.
  • >= also does issuperset() but >= doesn't support the combination of a set and list, tuple or iterator.
A = {10, 20, 30}
B = {10, 20, 30, 40}
C = {10, 20, 30}
D = {10, 20}

print(A.issuperset(B)) # False
print(A.issuperset(C)) # True
print(A.issuperset(D)) # True
print(A >= B) # False
print(A >= C) # True
print(A >= D) # True
Enter fullscreen mode Exit fullscreen mode
A = {10, 20, 30}     # set
B = [10, 20, 30, 40] # list
C = (10, 20, 30)     # tuple
D = iter([10, 20])   # iterator

print(A.issuperset(B)) # False
print(A.issuperset(C)) # True
print(A.issuperset(D)) # True
Enter fullscreen mode Exit fullscreen mode

sorted() can convert a set to a list, then sort the list, then the sorted list is converted to an unsorted set with set() as shown below:

*Memo:

  • The 1st argument is iterable(Required-Type:Iterable):
    • Don't use iterable=.
  • The 2nd argument is key(Optional-Default:None-Type:Callable or NoneType).
  • The 3rd argument is reverse(Optional-Default:False-Type:bool) to reverse the list.
  • sorted() creates a copy:
    • Be careful, sorted() does shallow copy instead of deep copy as my issue.
A = {3, 5, -2, 1, -4}

print(sorted(A))
print(sorted(A, key=None, reverse=False))
# [-4, -2, 1, 3, 5]

print(set(sorted(A)))
# {1, 3, 5, -4, -2}

print(set(sorted(A, reverse=True)))
# {1, 3, 5, -4, -2}

print(set(sorted(A, key=abs)))
# {1, 3, 5, -4, -2}

print(set(sorted(A, key=abs, reverse=True)))
# {1, 3, 5, -4, -2}
Enter fullscreen mode Exit fullscreen mode
A = {"apple", "Banana", "Kiwi", "cherry"}

""" Case sensitive sort """
print(set(sorted(A)))
# {'apple', 'cherry', 'Banana', 'Kiwi'}

""" Case insensitive sort """
print(set(sorted(A, key=str.upper)))
print(set(sorted(A, key=str.lower)))
# {'cherry', 'Banana', 'apple', 'Kiwi'}

""" Sort by the length of a word """
print(set(sorted(A, key=len)))
# {'apple', 'cherry', 'Banana', 'Kiwi'}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)