intro to sets (slides)

CSc 110 - Intro to Sets

Data Structures in Python

  • lists (mutable)
  • dictionaries (mutable)
  • tuples (immutable)
  • sets (mutable)

Lists

  • store:
    • ordered items (it keeps the original order)
    • elements of different types
    • repeated elements
  • use square brackets ([]) syntax for creating a list
  • allow indexing (integers starting at 0) with square brackets ([]) as well
  • are mutable

Tuples

  • store:
    • ordered items (it keeps the original order)
    • elements of different types
    • repeated elements
  • use parentheses (()) syntax for creating a tuple
  • allow indexing (integers starting at 0) with square brackets ([])
  • are immutable

Dictionaries

  • store pairs of items key: value
  • keys have to be unique (no repeated keys allowed)
  • use curly brackets ({}) with key and value separated by colon (:)
  • allow value retrieval through key with square brackets ([])
  • are mutable

Sets

  • store:

    • do NOT store items in the order you created them
    • CANNOT use square brackets to retrieve an item
    • do NOT allow repeated items to be stored
  • use set() to initiate an empty set

  • use curly brackets ({}) for creating a set with values

  • use for x in set to iterate over the elements in a set

Set methods

  • .add(value) adds an element to the set

  • .discard(value) discards the specified value

  • You can also use in and len() with sets

Converting data structure

  • set() to convert a list/tuple into a set
print(set([3, 2, 2, 1]), set((3, 2, 2, 1)))
{1, 2, 3} {1, 2, 3}
  • list() to convert a set/tuple into a list
print(list({3, 2, 2, 1}), list((3, 2, 2, 1)))
[1, 2, 3] [3, 2, 2, 1]
  • tuple() to convert a list/set into a tuple
print(tuple({3, 2, 2, 1}), tuple([3, 2, 2, 1]))
(1, 2, 3) (3, 2, 2, 1)

Evaluate the code

numbers_list = [2, 1, 2, 1, 3, 4, 1]
numbers_list # evaluate this line

numbers_set = set(numbers_list)
numbers_set # evaluate this line

numbers_set.add(1)
numbers_set.add(2)
numbers_set # evaluate this line

numbers_set.add(5)
numbers_set # evaluate this line

numbers_set.discard(6)
numbers_set.discard(1)
numbers_set # evaluate this line

Evaluate the code

numbers_list = [2, 1, 2, 1, 3, 4, 1]
numbers_list # evaluate this line
[2, 1, 2, 1, 3, 4, 1]
numbers_set = set(numbers_list)
numbers_set # evaluate this line
{1, 2, 3, 4}
numbers_set.add(1)
numbers_set.add(2)
numbers_set # evaluate this line
{1, 2, 3, 4}
numbers_set.add(5)
numbers_set # evaluate this line
{1, 2, 3, 4, 5}
numbers_set.discard(6)
numbers_set.discard(1)
numbers_set # evaluate this line
{2, 3, 4, 5}

Write a function

  1. Its name is count_names
  2. It opens in read mode a file that contains a name per line, with repeated names
  3. It counts how many unique names there are in the file
  4. It returns an integer with the count
  5. Use a set for this
assert count_names("names.txt") == 11

Write a function – solution

def count_names(file_name):
  f = open(file_name, "r")
  name_set = set()
  for line in f:
    name = line.strip()
    if name != "":
      name_set.add(name)
  f.close()
  return len(name_set)

def main():
  assert count_names("names.txt") == 11
  
main()

Write a function

  1. Its name is has_duplicates
  2. It takes a variable number of arguments: *values
  3. It returns True if there are repeated elements in values, False otherwise
assert has_duplicates(3, 2, 1, 2, 3) == True
assert has_duplicates(3, 20, 1, 2, 13) == False

Write a function – solution 1

def has_duplicates(*values):
  values_set = set(values)
  return len(values) > len(values_set)

def main():
  assert has_duplicates(3, 2, 1, 2, 3) == True
  assert has_duplicates(3, 20, 1, 2, 13) == False
  
main()

Write a function – solution 2

def has_duplicates(*values):
  unique_values = set()
  for v in values:
    if v not in unique_values:
      unique_values.add(v)
    else:
      return True
  return False

def main():
  assert has_duplicates(3, 2, 1, 2, 3) == True
  assert has_duplicates(3, 20, 1, 2, 13) == False
  
main()

Quiz 10

current time

You have 10 minutes to complete the quiz.