A list is a container that holds a sequence of related pieces of information.
The shortest list is an empty list, just 2 square brackets:
                    members = []
                    Lists can hold any Python values, separated by commas:
                    members = ["Pamela", "Tinu", "Brenda", "Kaya"]
                    ages_of_kids = [1, 2, 7]
                    prices = [79.99, 49.99, 89.99]
                    digits = [2//2, 2+2+2+2, 2, 2*2*2]
                    remixed = ["Pamela", 7, 79.99, 2*2*2]
                    Use the global len() function
                        to find the length of a list.
                    attendees = ["Tammy", "Shonda", "Tina"]
                    print(len(attendees))   #  3
                    num_of_attendees = len(attendees)
                    print(num_of_attendees)
                    🤔 What could go wrong with storing the length?
Each list item has an index, starting from 0.
                    letters = ['A', 'B', 'C']
                    # Index:   0     1     2
                    Access each item by putting the index in brackets:
                    letters[0]  # 'A'
                    letters[1]  # 'B'
                    letters[2]  # 'C'
                    letters[3]  # 🚫 Error!
                    
                    curr_ind = 1
                    letters[curr_ind] # 'B'
                    Negative indices are also possible:
                    letters[-1]  # 'C'
                    letters[-2]  # 'B'
                    letters[-4]  # 🚫 Error!
                    It's also possible to use a function from the operator module:
                    from operator import getitem
                    getitem(letters, 0)
                    Add two lists together using the + operator:
                    boba_prices = [5.50, 6.50, 7.50]
                    smoothie_prices = [7.00, 7.50]
                    all_prices = boba_prices + smoothie_prices
                    Or the add function:
                    from operator import add
                    boba_prices = [5.50, 6.50, 7.50]
                    smoothie_prices = [7.00, 7.50]
                    all_prices = add(boba_prices, smoothie_prices)
                    Concatenate the same list multiple times using the * operator:
                    boba_prices = [5.50, 6.50, 7.50]
                    more_boba = boba_prices * 3
                    Or the mul function:
                    from operator import mul
                    boba_prices = [5.50, 6.50, 7.50]
                    more_boba = mul(boba_prices, 3)
                    All together now:
                    digits = [1, 9, 8, 4]
                    together = [6, 2, 4] + digits * 2 # [6, 2, 4, 1, 9, 8, 4, 1, 9, 8, 4]
                    together = add([2, 7], mul(digits, 2)) 
                    Since Python lists can contain any values, an item can itself be a list.
                    gymnasts = [ ["Brittany", 9.15, 9.4, 9.3, 9.2],
                                    ["Lea", 9, 8.8, 9.1, 9.5],
                                    ["Maya", 9.2, 8.7, 9.2, 8.8] ]
                    gymnasts? 3
                        gymnasts[0]? 5
                    
                    gymnasts = [
                                    ["Brittany", 9.15, 9.4, 9.3, 9.2],
                                    ["Lea", 9, 8.8, 9.1, 9.5],
                                    ["Maya", 9.2, 8.7, 9.2, 8.8]
                                ]
                    Access using bracket notation, with more brackets as needed:
                    gymnasts[0]    # ["Brittany", 9.15, 9.4, 9.3, 9.2]
                    gymnasts[0][0] # "Brittany"
                    gymnasts[1][0] # "Lea"
                    gymnasts[1][4] # 9.5
                    gymnasts[1][5] # 🚫 IndexError!
                    gymnasts[3][0] # 🚫 IndexError!
                    Use the in operator to test if value is inside a container:
                    digits = [2, 8, 3, 1, 8, 5, 3, 0, 7, 1]
                    1 in digits # True
                    3 in digits # True
                    4 in digits # False
                    not (4 in digits) # True
                    The for loop syntax:
                    for <value> in <sequence>:
                        <statement>
                        <statement>
                    The for loop provides a cleaner way to write many while loops,
                        as long as they are iterating over some sort of sequence.
                    
                    def count(s, value):
                        total = 0
                        for element in s:
                            if element == value:
                                total = total + 1
                        return total
                    
                    for <name> in <expression>:
                        <suite>
                    <expression>, which must yield an iterable value (a sequence)
                        <name> to that element in the current frame
                            <suite>
                            
                    gymnasts = [
                                    ["Brittany", 9.15, 9.4, 9.3, 9.2],
                                    ["Lea", 9, 8.8, 9.1, 9.5],
                                    ["Maya", 9.2, 8.7, 9.2, 8.8]
                                ]
                    Use a nested for-in loop:
                    for gymnast in gymnasts:
                        for data in gymnast:
                            print(data, end="|")
                    Remember what type of data is being stored in the loop variable!
                    pairs = [[1, 2], [2, 2], [3, 2], [4, 4]]
                    same_count = 0
                    for x, y in pairs:
                        if x == y:
                            same_count = same_count + 1
                    Each name is bound to a value, like in multiple assignment.
A range represents a sequence of integers.
                    ... -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5...
                                    range(-2, 3)
                    If just one argument, range starts at 0 and ends just before it:
                    for num in range(6):
                        print(num)       # 0, 1, 2, 3, 4, 5
                    If two arguments, range starts at first and ends just before second:
                    for num in range(1, 6):
                        print(num)       # 1, 2, 3, 4, 5
                    A way to create a new list by "mapping" an existing list.
Short version:
                    [<map exp> for <name> in <iter exp>]
                    
                    odds = [1, 3, 5, 7, 9]
                    evens = [(num + 1) for num in odds]
                    Long version (with filter):
                    [<map exp> for <name> in <iter exp> if <filter exp>]
                    
                    temps = [60, 65, 71, 67, 77, 89]
                    hot = [temp for temp in temps if temp > 70]
                    
                    [<map exp> for <name> in <iter exp> if <filter exp>]
                    <iter exp>:
                            <name> to that element in the new frame from step 1
                            <filter exp> evaluates to a true value, then add the value of <map exp> to the result list
                            
                    letters = ['a', 'b', 'c', 'd', 'e', 'f', 'm', 'n', 'o', 'p']
                    word = [letters[i] for i in [3, 4, 6, 8]]
                    
                    def divisors(n):
                        """Returns all the divisors of N.
                        >>> divisors(12)
                        [1, 2, 3, 4, 6]
                        """
                    
                    def divisors(n):
                        """Returns all the divisors of N.
                        >>> divisors(12)
                        [1, 2, 3, 4, 6]
                        """
                        return [x for x in range(1, n) if n % x == 0]
                    
                    def front(s, f):
                        """Return S but with elements chosen by F at the front.
                        >>> front(range(10), lambda x: x % 2 == 1)  # odds in front
                        [1, 3, 5, 7, 9, 0, 2, 4, 6, 8]
                        """
                    
                    def front(s, f):
                        """Return S but with elements chosen by F at the front.
                        >>> front(range(10), lambda x: x % 2 == 1)  # odds in front
                        [1, 3, 5, 7, 9, 0, 2, 4, 6, 8]
                        """
                        return [e for e in s if f(e)] + [e for e in s if not f(e)]
                    Representing data:
                    '2,400' '2.400' '1.2e-5' 
                    Representing language:
                    """Se lembra quando a gente
                    Chegou um dia a acreditar
                    Que tudo era pra sempre
                    Sem saber
                    Que o pra sempre sempre acaba"""
                    Representing programs:
                    'curry = lambda f: lambda x: lambda y: f(x, y)'
                    Single quoted strings and double quoted strings are equivalent:
                    '您好, I am a string, hear me roar 🦁!'
                    "I've got an apostrophe"
                    Multi-line strings automatically insert new lines:
                    """The Zen of Python
                    claims, Readability counts.
                    Read more: import this."""
                    # 'The Zen of Python\nclaims, Readability counts.\nRead more: import this.'
                    The \n is an escape sequence
                        signifying a line feed.
                    alfabeto = 'abcdefghijklmnñopqrstuvwxyz'
                    len(alfabeto)  # 27
                    alfabeto[14] + "andu" # ñandu
                    alfabeto + ' ¡Ya conoces el ABC!'
                    A single-character string is the same as the character itself.
                    initial = 'P'
                    initial[0] == initial  # True
                    The in operator will match substrings:
                    'W' in 'Where\'s Waldo'      # True
                    'Waldo' in  'Where\'s Waldo' # True