### Lists

 Lists, indexing and slicing and operators A list is a sequence of items. A = [4, 12, -5.5] The elements of a list can be of any type B = [4, "Is it really?", True] Lists can contain lists as elements (sometimes we use the term "sublists") C = ['a sublist is next:', ["yup", "this is", 1]] D = [1, [2, 3, [5, 6]], 4] The len() function counts the number of elements in a list.  Actually the number of "top-level" elements.  See the example: len(A) → 3 len(B) → 3 len(C) → 2 len(D) → 3 You can access elements inside a list in the same way you do in a string: indexing by position A[0] → 4 B[-1] → True C[1] → ["yup", "this is", 1] D[3] → IndexError: list index out of range List slicing works the same way as it does for strings. A[1:3] → [12, -5.5] B[2:15] → [True] C[::-1] → [["yup", "this is", 1], 'a sublist is next:'] D[3:5] → [] As you can see, the empty list [] is a valid list, just like the empty string "". len([]) → 0 You can index deeply into lists with sublists.  And combine indexing with slicing. D[1] → [2, 3, [5, 6]] D[1][0] → 2 D[1][2] → [5, 6] D[1][2][1] → 6 D[1][::-1] → [[5, 6], 3, 2] D[1][::-1][1] → 3 You don't need to put lists into variables to do indexing or slicing on them -- you can do that on literal lists (though you rarely want to do that, except to show that it can be done).  You can also do this with strings. [1,3,['Hello', 'there']][2][1] → 'there' 'Hi there'[3:6] → 'the' You can use the "+" to merge lists, just like strings. A + D → [4, 12, -5.5, 1, [2, 3, [5, 6]], 4] You can use * to repeat elements, just like strings (sort of). [1, 2]*3 → [1, 2, 1, 2, 1, 2] [[1, 2]]*3 → [[1, 2], [1, 2], [1, 2]] Differences between strings and lists Strings are "immutable".  That means that they cannot be changed.  You can create a new string from an old one, but you cannot change the old one. P = "Hi there" Q = P[:2]+P[3]+P[2]+P[4:]  # Q → 'Hit here' P[0] = 'a' → TypeError: 'str' object does not support item assignment List are mutable. You can replace elements of a list or slices of a list with just about anything (no elephants) E = [0, 1, 2, 3, 4] E[1] = 98  # E → [0, 98, 2, 3, 4] E[1] = ['hi', 'there'] # E → [0, ['hi', 'there'], 2, 3, 4] E[1:3] = [] # E → [0, 3, 4] E[0:2] = ['one', 'two', 'there'] # E → ['one' 'two' 'there', 4] E[1:3] = 'a' # E → ['one', 'a', 4]