Lesson 4: Non-Primitive Data Types

In this lesson, we will learn about...

  • Lists
  • Tuples
  • Sets
  • Dictionaries

While there are many others, we will look at the four main collection data types. Many have roots in math. They can hold any data type, and even multiple types at once. They have many similarities but some important differences.

Type Representation Ordered? Changeable / Mutable? Duplicates? Special Qualities
List [] Yes Yes Yes
Tuple () Yes No Yes
Set {} No Yes No Unindexed
Dictionary {:} No Yes No Indexed by key

List

This is the closest data type to the traditional array.

In [1]:
fruits = ["apple", "banana", "orange"]

print(fruits)
print(len(fruits))
print(fruits[1])
print(fruits[-1])
print(fruits[0:2])
print("banana" in fruits)
print(fruits[0].upper())
print(fruits[1][1])
['apple', 'banana', 'orange']
3
banana
orange
['apple', 'banana']
True
APPLE
a
In [2]:
fruits = ["apple", "banana", "orange"]
veggies = ["carrot", "squash"]

fruits[1] = "pineapple"
print(fruits)

fruits.append("blueberry")
fruits.insert(1, "tomato")
print(fruits)

fruits.remove("apple")
print(fruits)

popped = fruits.pop()
print(fruits)
print(popped)

print(fruits + veggies)

fruits.clear()
print(fruits)
['apple', 'pineapple', 'orange']
['apple', 'tomato', 'pineapple', 'orange', 'blueberry']
['tomato', 'pineapple', 'orange', 'blueberry']
['tomato', 'pineapple', 'orange']
blueberry
['tomato', 'pineapple', 'orange', 'carrot', 'squash']
[]

There are many more list methods available. A reference can be found here.

Tuple

These are unordered and unchangeable / immutable.

In [3]:
fruits = ("apple", "banana", "orange")

print(fruits)
print(len(fruits))
print(fruits[1])
print(fruits[-1])
print(fruits[0:2])
print("banana" in fruits)
print(fruits[0].upper())
print(fruits[1][1])
('apple', 'banana', 'orange')
3
banana
orange
('apple', 'banana')
True
APPLE
a
In [4]:
fruits = ("apple", "banana", "orange")
veggies = ("carrot", "squash")

# fruits[1] = "pineapple" ## Illegal!
# print(fruits)

# fruits.append("blueberry") ## Illegal!
# fruits.insert(1, "tomato") ## Illegal!
# print(fruits)

# fruits.remove("apple") ## Illegal!
# print(fruits)

# popped = fruits.pop() ## Illegal!
# print(fruits)
# print(popped)

print(fruits + veggies)

# fruits.clear() ## Illegal!
# print(fruits)
('apple', 'banana', 'orange', 'carrot', 'squash')

There are only two methods available for tuples, count() and index(). Learn more here.

Sets

These have no order and do not allow duplicates. They are also unindexed.

In [5]:
fruits = {"apple", "banana", "orange"}

print(fruits)
print(len(fruits))
# print(fruits[1]) ## Illegal!
# print(fruits[-1])  ## Illegal!
# print(fruits[0:2])  ## Illegal!
print("banana" in fruits)
# print(fruits[0].upper())  ## Illegal!
# print(fruits[1][1])  ## Illegal!
{'orange', 'banana', 'apple'}
3
True
In [6]:
fruits = {"apple", "banana", "orange"}
veggies = {"carrot", "squash"}

# fruits[1] = "pineapple" ## Illegal!
# print(fruits)

fruits.add("blueberry")
# fruits.insert(1, "tomato")  ## Illegal!
print(fruits)

fruits.remove("apple")
print(fruits)

fruits.discard("lemon")
print(fruits)

popped = fruits.pop()
print(fruits)
print(popped)

union = fruits.union(veggies)
print(union)

fruits.clear()
print(fruits)
{'orange', 'blueberry', 'banana', 'apple'}
{'orange', 'blueberry', 'banana'}
{'orange', 'blueberry', 'banana'}
{'blueberry', 'banana'}
orange
{'carrot', 'blueberry', 'banana', 'squash'}
set()

There are many more set methods available. A reference can be found here.

Dictionary

A dictionary is a map between a string key and a value.

In [7]:
colors = {"orange": "orange", "banana": "yellow", "apple": "red"}

print(colors)
print(colors.values())
print(colors.items())
print(len(colors))

print(colors["banana"])

print("banana" in colors)
print("yellow" in colors)
{'orange': 'orange', 'banana': 'yellow', 'apple': 'red'}
dict_values(['orange', 'yellow', 'red'])
dict_items([('orange', 'orange'), ('banana', 'yellow'), ('apple', 'red')])
3
yellow
True
False
In [8]:
colors = {"orange": "orange", "banana": "yellow", "apple": "red"}
colors2 = {"tomato": "red"}

colors["blueberry"] = "blue"
print(colors.items())

popped = colors.pop("apple")
print(colors.items())
print(popped)

popped = colors.popitem()
print(colors.items())
print(popped)

colors["more"] = colors2
print(colors.items())

colors.clear()
print(colors.items())
dict_items([('orange', 'orange'), ('banana', 'yellow'), ('apple', 'red'), ('blueberry', 'blue')])
dict_items([('orange', 'orange'), ('banana', 'yellow'), ('blueberry', 'blue')])
red
dict_items([('orange', 'orange'), ('banana', 'yellow')])
('blueberry', 'blue')
dict_items([('orange', 'orange'), ('banana', 'yellow'), ('more', {'tomato': 'red'})])
dict_items([])

There are many more dictionary methods available. A reference can be found here.