Skip to content

t0q33r/pyhelper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Okay, let's dive into Python sets.

What are Sets?

In Python, a set is an unordered collection of unique elements. Think of it like a mathematical set – it can contain any number of distinct items, but each item can appear only once. Sets are useful for tasks like removing duplicates from a list, performing mathematical set operations (union, intersection, difference), and testing for membership.

Key Characteristics:

  • Unordered: Elements in a set have no specific order. You can't access elements by index.
  • Unique: Sets do not allow duplicate elements. If you try to add a duplicate, it will be ignored.
  • Mutable: Sets are mutable, meaning you can add or remove elements after they are created.
  • Unindexed: You cannot access items in a set by referring to an index, since sets are unordered the items has no position.

Creating Sets:

You can create sets in a couple of ways:

  1. Using curly braces {}:

    my_set = {1, 2, 3, 4, 5}
    print(my_set)  # Output: {1, 2, 3, 4, 5}
    
    # Empty set (Important: {} creates an empty dictionary, not a set)
    empty_set = set() # This is the correct way to create an empty set
    print(type(empty_set)) # Output: <class 'set'>
  2. Using the set() constructor:

    my_list = [1, 2, 2, 3, 4, 4, 5]
    my_set = set(my_list)  # Creates a set from a list, removing duplicates
    print(my_set)  # Output: {1, 2, 3, 4, 5}
    
    my_string = "hello"
    my_set_from_string = set(my_string)
    print(my_set_from_string) # Output: {'h', 'e', 'l', 'o'} (Order may vary)

Basic Set Operations:

Here are some common operations you can perform on sets:

  • Adding Elements:

    • add(element): Adds a single element to the set.
    • update(iterable): Adds multiple elements from an iterable (like a list, tuple, or another set).
    my_set = {1, 2, 3}
    my_set.add(4)
    print(my_set)  # Output: {1, 2, 3, 4}
    
    my_set.update([5, 6, 7])
    print(my_set)  # Output: {1, 2, 3, 4, 5, 6, 7}
  • Removing Elements:

    • remove(element): Removes the specified element. Raises a KeyError if the element is not found.
    • discard(element): Removes the specified element if it's present. Does nothing if the element is not found (no error).
    • pop(): Removes and returns an arbitrary element from the set. Raises a KeyError if the set is empty.
    • clear(): Removes all elements from the set.
    my_set = {1, 2, 3, 4, 5}
    my_set.remove(3)
    print(my_set)  # Output: {1, 2, 4, 5}
    
    my_set.discard(6)  # No error, even though 6 is not in the set
    print(my_set) # Output: {1, 2, 4, 5}
    
    element = my_set.pop()
    print(element) # Output: (An arbitrary element, e.g., 1)
    print(my_set)  # Output: (Set with the popped element removed, e.g., {2, 4, 5})
    
    my_set.clear()
    print(my_set)  # Output: set() (An empty set)
  • Set Operations (Mathematical):

    • union(other_set, ...) or |: Returns a new set containing all elements from both sets.
    • intersection(other_set, ...) or &: Returns a new set containing elements common to both sets.
    • difference(other_set, ...) or -: Returns a new set containing elements in the first set but not in the second set.
    • symmetric_difference(other_set) or ^: Returns a new set containing elements that are in either set, but not in both.
    • isdisjoint(other_set): Returns True if the sets have no elements in common.
    • issubset(other_set) or <=: Returns True if all elements of the first set are in the second set.
    • issuperset(other_set) or >=: Returns True if the second set contains all elements of the first set.
    set1 = {1, 2, 3, 4, 5}
    set2 = {3, 4, 5, 6, 7}
    
    print(set1.union(set2))  # Output: {1, 2, 3, 4, 5, 6, 7}
    print(set1 | set2) # Output: {1, 2, 3, 4, 5, 6, 7}
    
    print(set1.intersection(set2))  # Output: {3, 4, 5}
    print(set1 & set2) # Output: {3, 4, 5}
    
    print(set1.difference(set2))  # Output: {1, 2}
    print(set1 - set2) # Output: {1, 2}
    
    print(set1.symmetric_difference(set2))  # Output: {1, 2, 6, 7}
    print(set1 ^ set2) # Output: {1, 2, 6, 7}
    
    print(set1.isdisjoint(set2)) # Output: False
    
    set3 = {1, 2}
    print(set3.issubset(set1)) # Output: True
    print(set3 <= set1) # Output: True
    
    print(set1.issuperset(set3)) # Output: True
    print(set1 >= set3) # Output: True
  • Membership Testing:

    You can efficiently check if an element is in a set using the in operator:

    my_set = {1, 2, 3, 4, 5}
    print(3 in my_set)  # Output: True
    print(6 in my_set)  # Output: False

Important Notes:

  • Sets can only contain immutable objects (numbers, strings, tuples). You cannot store lists or dictionaries directly in a set.
  • Since sets are unordered, you cannot rely on the order of elements when iterating through them.
  • Sets are implemented using hash tables, which provide very fast membership testing (checking if an element is in the set).

When to Use Sets:

  • Removing duplicates from a list.
  • Performing mathematical set operations.
  • Checking for membership efficiently (e.g., is this item in a collection of items?).
  • When the order of elements doesn't matter.

Let me know if you'd like more detailed examples or explanations of any specific aspect of sets!

About

assignment

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages