Collections are data types that can hold multiple values. There are 4 built-in collection data types in Python:
tuplelistsetdict(Covered separately in Data types (Collections - Dictionary))str(Which is a primitive data type, but it's also a collection data type)
Tuples are ordered, immutable (unchangeable) collections of data. They are defined by using round brackets () and separating the values with a comma ,. For example:
x = (1, 2, 3)
y = ("a", "b", "c")
z = (1, "a", 2, "b", 3, "c")We can access the values in a tuple by using the index of the value (index starts at 0). For example:
x = (1, 2, 3)
print(x[0]) # 1But we can't change the values in a tuple, for example:
x = (1, 2, 3)
x[0] = 10 # TypeError: 'tuple' object does not support item assignmentLists are ordered, mutable (changeable) collections of data. They are defined by using square brackets [] and separating the values with a comma ,. For example:
x = [1, 2, 3]
y = ["a", "b", "c"]
z = [1, "a", 2, "b", 3, "c"]We can access the values in a list by using the index of the value (index starts at 0). For example:
x = [1, 2, 3]
print(x[0]) # 1But unlike tuple we can change the values in a list, for example:
x = [1, 2, 3]
x[0] = 10
print(x) # [10, 2, 3]And we can add or remove values from a list as well, for example:
x = [1, 2, 3]
x.append(4) # append always adds the value to the end of the list
print(x) # [1, 2, 3, 4]
x.remove(2) # remove removes the first occurrence of the value
print(x) # [1, 3, 4]Sets are unordered, mutable (changeable) collections of data. They are defined by using curly brackets {} and separating the values with a comma ,. For example:
x = {1, 2, 3}
y = {"a", "b", "c"}
z = {1, "a", 2, "b", 3, "c"}Unlike list or tuple (which are ordered) we can't access the values in a set by using the index of the value, for example:
x = {1, 2, 3}
x[0] # TypeError: 'set' object is not subscriptableBut we can change the values in a set, for example:
x = {1, 2, 3}
x.add(4)
print(x) # {1, 2, 3, 4}
x.remove(2)
print(x) # {1, 3, 4}The main feature of set as a collection is that it can't contain duplicate values, for example:
x = {1, 2, 3, 3, 3, 3, 3}
print(x) # {1, 2, 3}
x.add(1)
print(x) # {1, 2, 3}Strings are considered both primitive and collection data types. They are ordered, immutable (unchangeable) collections of data. They are most similar to tuple in that regard, because we can access the values in a string by using the index of the value (index starts at 0), but we can't change the values in a string, for example:
x = "Hello World"
print(x[0]) # H
x[0] = "h" # TypeError: 'str' object does not support item assignmentWe can use the keywords tuple(), list(), set() to convert between data types, for example:
x = (1, 2, 3)
print(x) # (1, 2, 3)
print(type(x)) # <class 'tuple'>
y = list(x)
print(y) # [1, 2, 3]
print(type(y)) # <class 'list'>
z = set(y)
print(z) # {1, 2, 3}
print(type(z)) # <class 'set'>But because str is also a collection data type, we can convert it to tuple, list or set as well, for example:
x = "Hello World"
print(x) # Hello World
print(type(x)) # <class 'str'>
y = tuple(x)
print(y) # ('H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd')
print(type(y)) # <class 'tuple'>
z = list(x)
print(z) # ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
print(type(z)) # <class 'list'>
w = set(x)
print(w) # {'H', 'o', 'r', 'l', ' ', 'W', 'e', 'd'}
print(type(w)) # <class 'set'>Notice that when we convert a str to tuple or list we get a collection of characters, but when we convert it to set we get a collection of unique characters (because set can't contain duplicate values).
We can use the len() function to get the length of a collection, for example:
x = (1, 2, 3)
print(len(x)) # 3
y = [1, 2, 3]
print(len(y)) # 3
z = {1, 2, 3}
print(len(z)) # 3
w = "Hello World"
print(len(w)) # 11We can use the in keyword to check if a value exists in a collection, for example:
x = (1, 2, 3)
print(1 in x) # True
print(4 in x) # False
y = [1, 2, 3]
print(1 in y) # True
print(4 in y) # False
z = {1, 2, 3}
print(1 in z) # True
print(4 in z) # False
w = "Hello World"
print("Hello" in w) # True
print("hello" in w) # FalseWe can use max() and min() to get the maximum and minimum values in a collection, for example:
x = (1, 2, 3)
print(max(x)) # 3
print(min(x)) # 1Note that max() and min() only work with collections that contain values of the same type, for example:
x = (1, "a", 2, "b", 3, "c")
print(max(x)) # TypeError: '>' not supported between instances of 'str' and 'int'But note that when using max() and min() with str it will compare the characters based on their ASCII values, for example:
x = "Hello World"
print(max(x)) # r
print(min(x)) # (space)We can use sum() to get the sum of all the values in a collection, for example:
x = (1, 2, 3)
print(sum(x)) # 6But obviously sum() only works with collections that contain numbers (int or float), for example:
x = [1, 2, 3.5]
print(sum(x)) # 6.5
y = {"a", "b", "c"}
print(sum(y)) # TypeError: unsupported operand type(s) for +: 'int' and 'str'