# Python Sets

## Introduction:

Welcome to Whitewood Media’s Python programming tutorial series! In this lesson, we’ll dive into Python sets, a powerful and versatile data structure that web developers can use to manage unique, unordered collections of items. Sets offer a range of useful operations, such as union, intersection, and difference, which can be valuable in various web development tasks. In this tutorial, we’ll define Python sets, demonstrate their usage through code examples, and provide example problems for you to practice your newfound skills.

## Definition of Python Sets:

A Python set is an unordered collection of unique elements. Each element in a set can be of any hashable data type, such as numbers, strings, or tuples. Sets are created using curly braces `{}` or the built-in `set()` constructor. Duplicate elements are automatically removed from sets.

Here’s an example of a set containing integer values:

``````numbers = {1, 2, 3, 4, 5}
``````

You can also create a set with elements of different data types:

``````mixed_data = {42, "hello", (3, 4)}
``````

Note that sets cannot contain mutable elements, such as lists or other sets, as these are not hashable.

## Working with Python Sets:

1. Adding Elements to a Set:

You can add elements to a set using the `add()` method.

``````colors = {"red", "blue", "green"}

print(colors)  # Output: {'red', 'yellow', 'blue', 'green'}
``````
1. Removing Elements from a Set:

To remove elements from a set, you can use the `remove()` method or the `discard()` method.

``````colors = {"red", "blue", "green", "yellow"}

# Using the remove() method
colors.remove("green")
print(colors)  # Output: {'red', 'yellow', 'blue'}

print(colors)  # Output: {'red', 'yellow'}
``````

The `remove()` method raises a KeyError if the element is not found, while the `discard()` method does not.

1. Set Operations:

Python sets support various operations, such as union, intersection, and difference.

``````set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

# Union
union_result = set_a | set_b
print(union_result)  # Output: {1, 2, 3, 4, 5, 6}

# Intersection
intersection_result = set_a & set_b
print(intersection_result)  # Output: {3, 4}

# Difference
difference_result = set_a - set_b
print(difference_result)  # Output: {1, 2}
``````
1. Set Comprehensions:

Set comprehensions provide a concise way to create new sets based on existing ones. They consist of an expression followed by a `for` clause and an optional `if` clause.

Here’s an example of using a set comprehension to create a set of even numbers:

``````numbers = {1, 2, 3, 4, 5, 6}
even_numbers = {x for x in numbers if x % 2 == 0}

print(even_numbers)  # Output: {2, 4, 6}
``````

## Example Problems:

Now that you have a solid understanding of Python sets, try solving these example problems to practice your skills:

1. Write a function that takes a list of numbers and returns a set containing only the even numbers.

``````def extract_even_numbers(numbers):
return {num for num in numbers if num % 2 == 0}

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers = extract_even_numbers(numbers)
print(even_numbers)  # Output: {2, 4, 6, 8}
``````

2. Write a function that takes two sets and returns a new set containing the elements that appear in both input sets, without duplicates.

``````def common_elements(set1, set2):
return set1 & set2

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
result = common_elements(set1, set2)
print(result)  # Output: {4, 5}
``````

3. Write a function that takes a list of strings and returns a set containing the elements of the input list in lowercase.

``````def lowercase_set(elements):
return {elem.lower() for elem in elements}

words = ["Apple", "Banana", "Cherry", "Date"]
lowercase_words = lowercase_set(words)
print(lowercase_words)  # Output: {'apple', 'banana', 'cherry', 'date'}
``````

2. Q: What is the difference between a set and a list in Python? A: The primary difference is that sets are unordered and only store unique elements, while lists are ordered and can contain duplicate elements. Additionally, sets use curly braces `{}`, while lists use square brackets `[]`.