In this video we will cover Lists and Tuples. These are called compound data types and are one of the key types of data structures in Python. Tuples, tuples are an ordered sequence. Here is a tuple ratings. Tuples are expressed as comma separated elements within parentheses. These are values inside the parentheses. In Python, there are different types, strings, integer, float. They can all be contained in a tuple. But the type of the variable is tuple. Each element of a tuple can be accessed via an index. The following table represents the relationship between the index and the elements in the tuple. The first element can be accessed by the name of the tuple, followed by a square bracket with the index number, in this case, 0. We can access the second element as follows, we can also access the last element. In Python, we can use negative index. The relationship is as follows, the corresponding values are shown here. We can concatenate or combine tuples by adding them, the result is the following with the following index. If we would like multiple elements from a tuple, we could also slice tuples. For example, if we want the first three elements we use the following command, the last index is one larger than the index you want. Similarly, if we want the last two elements, we use the following command. Notice how the last index is one larger than the length of the tuple, we can use the len command to obtain the length of the tuple. As there are five elements, the result is five. Tuples are immutable, which means we can't change them. To see why this is important, let's see what happens when we set the variable ratings one to ratings. Let's use the image to provide a simplified explanation of what's going on. Each variable does not contain a tuple but references the same immutable tuple object. See the objects and classes module for more about objects. Let's say we want to change the element at index 2. Because tuples are immutable, we can't, therefore, ratings 1 will not be effected by a change in rating. Because the tuple is immutable, i.e, we can't change it. We can assign a different tuple to the ratings variable. The variable ratings now references another tuple. As a consequence of immutability, if we would like to manipulate a tuple, we must create a new tuple instead. For example, if we would like to sort a tuple, we use the function sorted, the input is the original tuple. The output is a new sorted tuple, for more on functions, see our video on functions. A tuple can contain other tuples as well as other complex data types, this is called nesting. We can access these elements using the standard indexing methods. If we select an index with the tuple, the same index convention applies. As such, we can then access values in the tuple. For example, we could access the second element, we can apply this indexing directly to the tuple variable NT. It is helpful to visualize this as a tree. We can visualize this nesting as a tree. The tuple has the following indexes. If we consider indexes with other tuples, we see the tuple at index 2 contains a tuple with two elements. We can access those two indexes. The same conventional applies to index 3. We can access the elements in those tuples as well. We can continue the process, we can even access deeper levels of the tree by adding another square bracket. We can access different characters in the string or various elements in the second tuple contained in the first. Lists are also a popular data structure in Python. Lists are also an ordered sequence. Here is a list L. A list is represented with square brackets. In may respects, lists are like tuples. One key difference is they are mutable. Lists can contain strings, floats, integers. We can nest other lists. We also nest tuples and other data structures. The same indexing conventions apply for nesting. Like tuples, each element of a list can be accessed via an index. The following table represents the relationship between the index and the elements in the list. The first element can be accessed by the name of the list followed by a square bracket with the index number, in this case, 0. We can access the second element as follows. We can also access the last element. In Python, we can use a negative index. The relationship is as follows. The corresponding indexes are as follows. We can also perform slicing in lists. For example, if we want the last two elements in this list, we use the following command. Notice how the last index is one larger than the length of the list. The index conventions for list and tuples are identical. Check the labs for more examples. We can concatenate or combine list by adding them. The result is the following. The new list has the following indices. Lists are mutable, therefore, we can change them. For example, we apply the method extends by adding a dot followed by the name of the method, then parentheses. The argument inside the parentheses is a new list that we are going to concatenate to the original list. In this case, instead of creating a new list L1, the original list L is modified by adding two new elements. To learn more about methods, check out our video on objects and classes. Another similar method is append. If we apply append instead of extended, we add one element to the list. If we look at the index, there is only one more element. Index 3 includes the list that we appended. Every time we apply a method, the list changes. If we apply extend, we add two new elements to the list. The list L is modified by adding two new elements. If we append the string A, we further change the list, adding the string A. As lists are mutable, we can change them. For example, we can change the first element as follows. The list now becomes hard rock, 10, 1.2. We can delete an element of a list using the Del command. We simply indicate the list item we could like to remove as an argument. For example, if we would like to remove the first element, the result becomes 10, 1.2. We can delete the second element. This operation removes the second element of the list. We can convert a string to a list using split. For example, the method split converts every group of characters separated by space into an element of a list. We can use the split function to separate strings on a specific character known as a delimiter. We simply pass the delimiter we would like to split on as an argument, in this case, a comma. The result is a list, each element corresponds to a set of characters that have been separated by a comma. When we set one variable B equal to A, both A and B are referencing the same list. Multiple names referring to the same object is known as aliasing. We know from the list slide that the first element in B is set as hard rock. If we change the first element in A to banana, we get a side effect. The value of B would change as a consequence. A and B are referencing the same list, therefore, if we change A, list B also changes. If we check the first element of B after changing list A, we get banana instead of hard rock. You can clone list A by using the following syntax, variable A references one list. Variable B references a new copy or clone of the original list. Now, if you change A, B will not change. We can get more info on list, tuples, and many other objects in Python using the help command. Simply pass in the list, tuple, or any other Python object. See the labs for more things you can do with lists.