# Sequence Types: list {:.no_toc} ## The goal > Lists are **mutable** sequences, **typically** used to store collections of **homogeneous** items (where the precise degree of similarity will vary by application).​ [Quote](https://docs.python.org/3/library/stdtypes.html#lists) Questions to [David Rotermund](mailto:davrot@uni-bremen.de) ## Example Lists With homogeneous items: ```python primes = [2, 3, 5, 7] collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] ``` A mixture of type: ```python def my_function(a): return a my_favourite_things = [32, "sleep", my_function] ``` ## Indexing ```python collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] print(collection_of_strings[0]) # -> AA print(collection_of_strings[1]) # -> BB print(collection_of_strings[-2]) # -> GG print(collection_of_strings[-1]) # -> HH ``` ## Slicing ```python collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] print(collection_of_strings[0:3]) # -> ['AA', 'BB', 'CC'] print(collection_of_strings[:3]) # -> ['AA', 'BB', 'CC'] print(collection_of_strings[3:]) # -> ['DD', 'EE', 'FF', 'GG', 'HH'] print(collection_of_strings[1:-1]) # -> ['BB', 'CC', 'DD', 'EE', 'FF', 'GG'] print(collection_of_strings[-3:]) # -> ['FF', 'GG', 'HH'] print(collection_of_strings[0:3]) # -> ['AA', 'BB', 'CC'] print(collection_of_strings[0:3:1]) # -> ['AA', 'BB', 'CC'] print(collection_of_strings[0:3:2]) # -> ['AA', 'CC'] print(collection_of_strings[::2]) # -> ['AA', 'CC', 'EE', 'GG'] ``` ## Changing lists ```python collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] collection_of_strings[3] = "II" print(collection_of_strings) # -> ['AA', 'BB', 'CC', 'II', 'EE', 'FF', 'GG', 'HH'] collection_of_strings[:3] = ["JJ", "KK", "LL"] print(collection_of_strings) # -> ['JJ', 'KK', 'LL', 'II', 'EE', 'FF', 'GG', 'HH'] collection_of_strings[:4] = [ "MM", "NN", "OO", "PP", ] print(collection_of_strings) # -> ['MM', 'NN', 'OO', 'PP', 'EE', 'FF', 'GG', 'HH'] ``` ## List functions ### [len()](https://docs.python.org/3/library/functions.html#len) and [sorted()](https://docs.python.org/3/library/functions.html#sorted) ```python collection_of_strings = [ "GG", "HH", "AA", "BB", "EE", "FF", "CC", "DD", ] print(len(collection_of_strings)) # -> 8 print(sorted(collection_of_strings)) # -> ['AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH'] ``` ### [max()](https://docs.python.org/3/library/functions.html#max), [min](https://docs.python.org/3/library/functions.html#min) and [sum()](https://docs.python.org/3/library/functions.html#sum) ```python primes = [2, 3, 5, 7] print(sum(primes)) # -> 17 print(max(primes)) # -> 7 print(min(primes)) # -> 2 ``` ## in Is **x in list**? ```python collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] print("AA" in collection_of_strings) # -> True print("XX" in collection_of_strings) # -> False print("AA" not in collection_of_strings) # -> False print("XX" not in collection_of_strings) # -> True ``` ## [Index](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists) Which index id has an element in a list? ```python collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] print(collection_of_strings.index("CC")) # -> 2 print(collection_of_strings.index("XX")) # -> ValueError: 'XX' is not in list ``` Maybe we don't want to start in the beginning of the list or don't want to search until the end of the list: ```python collection_of_strings = [ "AA", "BB", "CC", "DD", "EE", "BB", "FF", "GG", "BB", "HH", ] print(collection_of_strings.index("BB")) # -> 1 # At or after 2 print(collection_of_strings.index("BB", 2)) # -> 5 # Before 6 print(collection_of_strings.index("BB", 2, 6)) # -> 5 # Before 4 print(collection_of_strings.index("BB", 2, 4)) # ValueError: 'BB' is not in list ``` ### [append()](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists), [pop()](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists), and [remove()](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists) ```python collection_of_strings = [ "AA", "BB", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] collection_of_strings.append("II") print( collection_of_strings ) # -> ['AA', 'BB', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH', 'II'] print(collection_of_strings.pop()) # -> II print( collection_of_strings ) # -> ['AA', 'BB', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH'] collection_of_strings.remove("BB") print(collection_of_strings) # -> ['AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH'] collection_of_strings.remove("BB") print(collection_of_strings) # -> ['AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH'] collection_of_strings.remove("BB") print(collection_of_strings) # -> ValueError: list.remove(x): x not in list ``` ## [del](https://docs.python.org/3/tutorial/datastructures.html#the-del-statement) and [insert()](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists) Insert and delete an element. ```python collection_of_strings = [] collection_of_strings.append("BB") collection_of_strings.append("CC") collection_of_strings.append("DD") print(collection_of_strings) # -> ['BB', 'CC', 'DD'] collection_of_strings.insert(0, "AA") print(collection_of_strings) # -> ['AA', 'BB', 'CC', 'DD'] del collection_of_strings[1] print(collection_of_strings) # -> ['AA', 'CC', 'DD'] ``` ## + Concatenating lists. ```python collection_of_strings_a = [ "AA", "BB", "CC", "DD", ] collection_of_strings_b = [ "EE", "FF", "GG", "HH", ] print(collection_of_strings_a) # -> ['AA', 'BB', 'CC', 'DD'] print(collection_of_strings_b) # -> ['EE', 'FF', 'GG', 'HH'] collection_of_strings = collection_of_strings_a + collection_of_strings_b print(collection_of_strings) # -> ['AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH'] ``` ## * Repeat a list several times. ```python collection_of_strings = [ "AA", "BB", "CC", ] print(3 * collection_of_strings) # -> ['AA', 'BB', 'CC', 'AA', 'BB', 'CC', 'AA', 'BB', 'CC'] print(collection_of_strings * 3) # -> ['AA', 'BB', 'CC', 'AA', 'BB', 'CC', 'AA', 'BB', 'CC'] ``` ## count() How often does an element occur in the list? ```python collection_of_strings = [ "AA", "AA", "BB", "BB", "BB", "CC", "DD", "EE", "FF", "GG", "HH", ] print(collection_of_strings.count("AA")) # -> 2 print(collection_of_strings.count("BB")) # -> 3 print(collection_of_strings.count("CC")) # -> 1 ``` ## [Additional commands](https://docs.python.org/3/tutorial/datastructures.html) || |---| |list.append(x)​| |list.extend(iterable)​| |list.insert(i, x)​| |list.remove(x)|​ |list.pop([i])|​ |list.clear()​| |list.index(x[, start[, end]])​| |list.count(x)​| |list.sort(*, key=None, reverse=False)​| |list.reverse()|​ |list.copy()​| ## [Common Sequence Operations](https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range​) |Operation​|Result​| |---|---| |x in s​|True if an item of s is equal to x, else False​| |x not in s​|False if an item of s is equal to x, else True​| |s + t​|the concatenation of s and t​| |s * n or n * s​|equivalent to adding s to itself n times​| |s[i]|​ith item of s, origin 0​| |s[i:j]|​slice of s from i to j​| |s[i:j:k]|​slice of s from i to j with step k​| |len(s)​|length of s​| |min(s)​|smallest item of s​| |max(s)​|largest item of s​| |s.index(x[, i[, j]])​|index of the first occurrence of x in s (at or after index i and before index j)​| |s.count(x)​|total number of occurrences of x in s​|