C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Then: We use len(), in and not-in to test the set. It has just 3 elements, despite specifying 5 strings.
Tip: When the set is initialized, duplicate values are removed. As with a dictionary, no 2 keys can have the same value.
In: The set allows the in-keyword. This returns true or false depending on whether the item exists.
InPython program that creates set
# Create a set.
items = {"arrow", "spear", "arrow", "arrow", "rock"}
# Print set.
print(items)
print(len(items))
# Use in-keyword.
if "rock" in items:
print("Rock exists")
# Use not-in keywords.
if "clock" not in items:
print("Cloak not found")
Output
{'spear', 'arrow', 'rock'}
3
Rock exists
Cloak not found
Tip: This is a good approach if you don't know beforehand what elements are to be added.
Empty: We use set() to create an empty set. We cannot use empty curly brackets as they indicate an empty dictionary, not set.
Python program that adds, discards, removes
# An empty set.
items = set()
# Add three strings.
items.add("cat")
items.add("dog")
items.add("gerbil")
print(items)
Output
{'gerbil', 'dog', 'cat'}
Integers: A set can contain integers, strings, or any type of elements that can be hashed.
Python program that creates set from list
# Create a set from this list.
# ... Duplicates are ignored.
numbers = set([10, 20, 20, 30, 40, 50])
print(numbers)
Output
{40, 10, 20, 50, 30}
Here: In this program, we introduce two sets. The method results depend on the numbers in the sets.
Is subset: This returns true in the program because numbers2 is a subset of numbers1.
Is superset: This method also returns true in this program. Numbers1 is a superset of numbers2.
Intersection: This method returns a new set that contains just the shared numbers. Other values are omitted.
Python program that uses set methods
numbers1 = {1, 3, 5, 7}
numbers2 = {1, 3}
# Is subset.
if numbers2.issubset(numbers1):
print("Is a subset")
# Is superset.
if numbers1.issuperset(numbers2):
print("Is a superset")
# Intersection of the two sets.
print(numbers1.intersection(numbers2))
Output
Is a subset
Is a superset
{1, 3}
Here: In the program, the sets each contained a 3, but the union method returns a set with just one 3.
Python program that unions two sets
# Two sets.
set1 = {1, 2, 3}
set2 = {6, 5, 4, 3}
# Union the sets.
set3 = set1.union(set2)
print(set3)
Output
{1, 2, 3, 4, 5, 6}
Tip: Subtracting sets is not something I do every day. For this reason, I would prefer difference() to make the operation explicit.
Result: When we subtract set "b" from set "a", the string "connecticut" is removed. The other strings remain.
And: When we subtract set "a" from set "b", the string "connecticut" is also removed. The other two strings from "b" remain.
Python program that subtracts sets
a = {"new york", "connecticut", "new jersey"}
b = {"connecticut", "pennsylvania", "maine"}
# Subtract.
c = a - b
print(c)
# Difference.
c = a.difference(b)
print(c)
# Subtract in opposite order.
c = b - a
print(c)
# Difference in opposite order.
c = b.difference(a)
print(c)
Output
{'new jersey', 'new york'}
{'new jersey', 'new york'}
{'pennsylvania', 'maine'}
{'pennsylvania', 'maine'}
So: To safely use remove(), you may need to use the in-operator beforehand. Discard meanwhile does not need this step.
Python program that uses discard, remove
animals = {"cat", "dog", "parrot", "walrus"}
print(animals)
# Discard nonexistent element, nothing happens.
animals.discard("zebra")
print(animals)
# Discard element that exists.
animals.discard("cat")
print(animals)
# Remove element that exists.
animals.remove("parrot")
print(animals)
# Remove causes an error if the element is not found.
animals.remove("buffalo")
Output
{'walrus', 'dog', 'parrot', 'cat'}
{'walrus', 'dog', 'parrot', 'cat'}
{'walrus', 'dog', 'parrot'}
{'walrus', 'dog'}
Traceback (most recent call last):
File "...", line 16, in <module>
animals.remove("buffalo")
KeyError: 'buffalo'
Python program that uses dictionary, set keys
# This dictionary contains key-value pairs.
dictionary = {"cat": 1, "dog": 2, "bird": 3}
print(dictionary)
# This set contains just the dictionary's keys.
keys = set(dictionary)
print(keys)
Output
{'bird': 3, 'dog': 2, 'cat': 1}
{'cat', 'bird', 'dog'}
Python program that uses set and map
values = {10, 20, 30}
# Multiply all values in the set by 100.
result = map(lambda x: x * 100, values)
# Display our results.
for value in result:
print(value)
Output
1000
2000
3000
Version 1: This version of the code uses the set collection. It uses the "in" operator on the set.
Version 2: Here we use the dictionary instead of the set. The dictionary has keys and values, but the program does not use the values.
Result: The set was consistently faster. The set lookup was performed about 4% faster than the dictionary lookup in the simple benchmark.
Python program that benchmarks set
import time
set1 = {"a", "b", "c", "z"}
dict1 = {"a": 1, "b": 2, "c": 3, "z": 4}
print(time.time())
# Version 1: use set.
i = 0
while i < 10000000:
a = "z" in set1
i += 1
print(time.time())
# Version 2: use dictionary.
i = 0
while i < 10000000:
a = "z" in dict1
i += 1
print(time.time())
Output
1346615677.741
1346615679.7 (Set = 1.959 s)
1346615681.732 (Dictionary = 2.032 s)
1346615958.731
1346615960.692 (Set = 1.961 s)
1346615962.736 (Dictionary = 2.044 s)
Overall: A dictionary is more powerful than a set. But in certain programs, a set is more graceful. It has methods such as intersection().