Python offers three primary mutable collection types: lists, sets, and dictionaries. Each has unique characteristics suited for different use cases.
Lists
Ordered collections allowing duplicate elements
Use cases:
Storing sequences in a specific order
Keeping collections with potential duplicates
Algorithms requiring indexed element access
Example: Tracking visitor entries chronologically
visitors = ["Alice", "Bob", "Charlie", "David", "Alice", "Eve"]
# Get the 3rd visitor
third_visitor = visitors[2] # "Charlie"
# Add a new visitor
visitors.append("Frank")
# Find the first occurrence of Alice
first_alice_index = visitors.index("Alice") # 0
# Count how many times Alice visited
alice_visits = visitors.count("Alice") # 2
print(f"Total visitors today: {len(visitors)}")
print(f"Visitors in order: {', '.join(visitors)}")
Output:
Total visitors today: 7
Visitors in order: Alice, Bob, Charlie, David, Alice, Eve, Frank
Sets
Unordered collections of unique items
Use cases:
Removing duplicates
Membership testing
Set operations (union, intersection, difference)
Storing unique values without order importance
Example: Tracking unique daily visitors
unique_visitors = {"Alice", "Bob", "Charlie", "David", "Alice", "Eve"}
# Check if Frank has visited
has_frank_visited = "Frank" in unique_visitors # False
# Add a new unique visitor
unique_visitors.add("Frank")
# Try to add Alice again (won't change the set)
unique_visitors.add("Alice")
# Get the total number of unique visitors
total_unique_visitors = len(unique_visitors)
print(f"Total unique visitors: {total_unique_visitors}")
print(f"Unique visitors: {', '.join(unique_visitors)}")
# Set operations
yesterday_visitors = {"Alice", "Bob", "George", "Hannah"}
new_visitors_today = unique_visitors – yesterday_visitors
returning_visitors = unique_visitors.intersection(yesterday_visitors)
print(f"New visitors today: {', '.join(new_visitors_today)}")
print(f"Returning visitors: {', '.join(returning_visitors)}")
Output:
Total unique visitors: 6
Unique visitors: Alice, Charlie, Bob, David, Frank, Eve
New visitors today: David, Frank, Charlie, Eve
Returning visitors: Alice, Bob
Dictionaries
Unordered key-value pairs (keys must be unique and immutable)
Use cases:
Storing associated data
Fast value lookups by key
Counting item occurrences
Example: Managing detailed visitor information
visitor_info = {
"Alice": {"age": 28, "membership": "Gold", "visits": 3},
"Bob": {"age": 35, "membership": "Silver", "visits": 1},
"Charlie": {"age": 42, "membership": "Bronze", "visits": 2},
"David": {"age": 31, "membership": None, "visits": 1}
}
# Get Alice's information
alice_info = visitor_info["Alice"]
print(f"Alice's membership: {alice_info['membership']}")
# Update Bob's visit count
visitor_info["Bob"]["visits"] += 1
# Add a new visitor
visitor_info["Eve"] = {"age": 39, "membership": "Gold", "visits": 1}
# Get all Gold members
gold_members = [name for name, info in visitor_info.items() if info["membership"] == "Gold"]
print(f"Gold members: {', '.join(gold_members)}")
# Calculate average age of visitors
total_age = sum(info["age"] for info in visitor_info.values())
average_age = total_age / len(visitor_info)
print(f"Average visitor age: {average_age:.1f}")
# Find the visitor with the most visits
most_frequent_visitor = max(visitor_info, key=lambda x: visitor_info[x]["visits"])
print(f"Most frequent visitor: {most_frequent_visitor}")
Output:
Alice's membership: Gold
Gold members: Alice, Eve
Average visitor age: 35.0
Most frequent visitor: Alice
These examples demonstrate how each data structure can be used effectively in a visitor tracking system:
Lists are great for maintaining the order of visitors and allowing duplicate entries.
Sets are perfect for quickly checking unique visitors and performing set operations.
Dictionaries are ideal for storing and retrieving complex visitor information, with fast lookups based on visitor names.