diff -r 000000000000 -r 8083d21c0020 web/html/backup/ch02-list_tuples.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/html/backup/ch02-list_tuples.html Mon Jan 25 18:56:45 2010 +0530 @@ -0,0 +1,652 @@ + + + +Lists and Tuples + + + + + + + + +
+
+

+Lists and Tuples

+
+
+
+

Table of Contents

+
+
1. Common List Operations
+
+
1.1. Indexing
+
1.2. Concatenating
+
1.3. Slicing
+
1.4. Multiplication
+
1.5. Membership
+
1.6. Length, Maximum and Minimum
+
1.7. Changing Elements
+
1.8. Deleting Elements
+
1.9. Assign to Slices
+
+
2. None, Empty Lists, and Initialization
+
3. Nested Lists
+
4. List Methods
+
+
4.1. append
+
4.2. count
+
4.3. extend
+
4.4. index
+
4.5. insert
+
4.6. pop
+
4.7. remove
+
4.8. reverse
+
4.9. sort
+
+
5. Tuples
+
5.1. Common Tuple Operations
+
6. Additional Syntax
+
+
6.1. range()
+
6.2. for
+
+
7. Conclusion
+
+
Lists +

Python provides an intuitive way to represent a group items, called + Lists. The items of a + List are called its elements. Unlike C/C++, elements can be of any type. A + List is represented as a list of comma-sepated elements with square brackets around them: +

+
>>> a = [10, 'Python programming', 20.3523, 23, 3534534L]
+>>> a
+[10, 'Python programming', 20.3523, 23, 3534534L]
+
+
+
+
+

+1. Common List Operations

+

The following are some of the most commonly used operations on + Lists. +

+
+

+1.1. Indexing

+

Individual elements of a + List can be accessed using an index to the element. The indices start at 0. One can also access the elements of the + List in reverse using negative indices.: +

+
>>> a[1]
+'Python programming'
+>>> a[-1]
+3534534L
+
+
+

It is important to note here that the last element of the + List has an index of -1. +

+
+
+

+1.2. Concatenating

+

Two or more + Lists can be concatenated using the + operator: +

+
>>> a + ['foo', 12, 23.3432, 54]
+[10, 'Python programming', 20.3523, 'foo', 12, 23.3432, 54]
+>>> [54, 75, 23] + ['write', 67, 'read']
+[54, 75, 23, 'write', 67, 'read']
+
+
+
+
+
+

+1.3. Slicing

+

A + List can be sliced off to contain a subset of elements of the + List. Slicing can be done by using two indices separated by a colon, where the first index is inclusive and the second index is exclusive. The resulting slice is also a + List.: +

+
>>> num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+>>> num[3:6]
+[4, 5, 6]
+>>> num[0:1]
+[1]
+>>> num[7:10]
+[7, 8, 9]
+
+
+

The last example showed how to access last 3 elements of the + List. There is a small catch here. The second index 10 actually refers to the 11th element of the + List which is still valid, even though it doesn't exist because the second index is exclusive and tells the Python interpreter to get the last element of the + List. But this can also be done in a much easier way using negative indices: +

+
>>> num[-3:-1]
+[7, 8, 9]
+
+
+

Excluding the first index implies that the slice must start at the beginning of the + List, while excluding the second index includes all the elements till the end of the + List. A third parameter to a slice, which is implicitly taken as 1 is the step of the slice. It is specified as a value which follows a colon after the second index: +

+
>>> num[:4]
+[1, 2, 3, 4]
+>>> num[7:]
+[8, 9]
+>>> num[-3:]
+[7, 8, 9]
+>>> num[:]
+[1, 2, 3, 4, 5, 6, 7, 8, 9]
+>>> num[4:9:3]
+[5, 8]
+>>> num[3::2]
+[4, 6, 8]
+>>> num[::4]
+[1, 5, 9]
+
+
+
+
+
+

+1.4. Multiplication

+

A + List can be multiplied with an integer to repeat itself: +

+
>>> [20] * 5
+[20, 20, 20, 20, 20]
+>>> [42, 'Python', 54] * 3
+[42, 'Python', 54, 42, 'Python', 54, 42, 'Python', 54]
+
+
+
+
+
+

+1.5. Membership

+

+ in operator is used to find whether an element is part of the + List. It returns + True if the element is present in the + List or + False if it is not present. Since this operator returns a Boolean value it is called a Boolean operator: +

+
>>> names = ['Guido', 'Alex', 'Tim']
+>>> 'Tim' in names
+True
+>>> 'Adam' in names
+False
+
+
+
+
+
+

+1.6. Length, Maximum and Minimum

+

Length of a + List can be found out using the len function. The max function returns the element with the largest value and the min function returns the element with the smallest value: +

+
>>> num = [4, 1, 32, 12, 67, 34, 65]
+>>> len(num)
+7
+>>> max(num)
+67
+>>> min(num)
+1
+
+
+
+
+
+

+1.7. Changing Elements

+

Unlike Strings + Lists are mutable, i.e. elements of a + List can be manipulated: +

+
>>> a = [1, 3, 5, 7]
+>>> a[2] = 9
+>>> a
+[1, 3, 9, 7]
+
+
+
+
+
+

+1.8. Deleting Elements

+

An element or a slice of a + List can be deleted by using the + del statement: +

+
>>> a = [1, 3, 5, 7, 9, 11]
+>>> del a[-2:]
+>>> a
+[1, 3, 5, 7]
+>>> del a[1]
+>>> a
+[1, 5, 7]
+
+
+
+
+
+

+1.9. Assign to Slices

+

In the same way, values can be assigned to individual elements of the + List, a + List of elements can be assigned to a slice: +

+
>>> a = [2, 3, 4, 5]
+>>> a[:2] = [0, 1]
+[0, 1, 4, 5]
+>>> a[2:2] = [2, 3]
+>>> a
+[0, 1, 2, 3, 4, 5]
+>>> a[2:4] = []
+>>> a
+[0, 1, 4, 5]
+
+
+

The last two examples should be particularly noted carefully. The last but one example insert elements or a list of elements into a + List and the last example deletes a list of elements from the + List. +

+
+
+
+

+2. None, Empty Lists, and Initialization

+

An + Empty List is a + List with no elements and is simply represented as []. A + None List is one with all elements in it being + None. It serves the purpose having a container list of some fixed number of elements with no value: +

+
>>> a = []
+>>> a
+[]
+>>> n = [None] * 10
+>>> n
+[None, None, None, None, None, None, None, None, None, None]
+
+
+
+
+
+

+3. Nested Lists

+

As mentioned earlier, a List can contain elements of any data type. This also implies a + List can have a + Lists themselves as its elements. These are called as + Nested Lists. There is no limit on the depth of the + Nested Lists: +

+
>>> a = [1, [1, 2, 3], 3, [1, [1, 2, 3]], 7]
+
+
+
+
+
+

+4. List Methods

+

A method is a function that is coupled to an object. More about objects and its methods are discussed in Advanced Python module. In general, a method is called like:

+
object.method(arguments)
+
+
+

For now, it is enough to know that a list of elements is an object and so + List methods can be called upon them. Also some of the methods change the + List in-place, meaning it modifies the existing list instead of creating a new one, while other methods don't. It must be noted as we run through the + List methods. +

+

Some of the most commonly used + List methods are as follows: +

+
+

+4.1. append

+

The + append method is used to append an object at the end of the list: +

+
>>> prime = [2, 3, 5]
+>>> prime.append(7)
+>>> prime
+[2, 3, 5, 7]
+
+
+

It is important to note that append changes the + List in-place. +

+
+
+

+4.2. count

+

The + count method returns the number of occurences of a particular element in a list: +

+
>>> [1, 4, 4, 9, 9, 9].count(9)
+3
+>>> tlst = ['Python', 'is', 'a', 'beautiful', 'language']
+>>> tlst.count('Python')
+1
+
+
+
+
+
+

+4.3. extend

+

The + extend method extends the list on which it is called by the list supplied as argument to it: +

+
>>> a = [1, 2, 3]
+>>> b = [4, 5, 6]
+>>> a.extend(b)
+[1, 2, 3, 4, 5, 6]
+
+
+

This is an in-place method. This method is equivalent to using the + operator, but using the + operator returns a new list.

+
+
+

+4.4. index

+

The + index method returns the index position of the element in the list specified as argument: +

+
>>> a = [1, 2, 3, ,4, 5]
+>>> a.index(4)
+3
+
+
+
+
+
+

+4.5. insert

+

The + insert method is used to insert an element specified as the second argument to the list at the position specified by the first argument: +

+
>>> a = ['Python', 'is', 'cool']
+>>> a.insert(2, 'so')
+>>> a
+['Python', 'is', 'so', 'cool']
+
+
+

The + insert method changes the + List in-place. +

+
+
+

+4.6. pop

+

The + pop method removes an element from the list. The index position of the element to be removed can be specified as an argument to the + pop method, if not it removes the last element by default: +

+
>>> a = [1, 2, 3, 4, 5]
+>>> a.pop()
+>>> a
+5
+>>> a.pop(2)
+>>> a
+3
+
+
+

The + pop method changes the + List in-place. +

+
+
+

+4.7. remove

+

The + remove method removes the first occurence of an element supplied as a parameter: +

+
>>> a = [1, 2, 3, 4, 2, 5, 2]
+>>> a.remove(2)
+>>> a
+[1, 3, 4, 2, 5, 2]
+
+
+
+
+
+

+4.8. reverse

+

The + reverse method reverses elements in the list. It is important to note here that + reverse method changes the list in-place and doesn't return any thing: +

+
>>> a = ['guido', 'alex', 'tim']
+>>> a.reverse()
+>>> a
+['tim', 'alex', 'guido']
+
+
+
+
+
+

+4.9. sort

+

The + sort method is used to sort the elements of the list. The + sort method also sorts in-place and does not return anything: +

+
>>> a = [5, 1, 3, 7, 4]
+>>> a.sort()
+>>> a
+[1, 3, 4, 5, 7]
+
+
+

In addition to the sort method on a + List object we can also use the built-in + sorted function. This function takes the + List as a parameter and returns a sorted copy of the list. However the original list is left intact: +

+
>>> a = [5, 1, 3, 7, 4]
+>>> b = sorted(a)
+>>> b
+[1, 3, 4, 5, 7]
+>>> a
+[5, 1, 3, 7, 4]
+
+
+
+
+
+
+

+5. Tuples

+

+ Tuples are sequences just like + Lists, but they are immutable. In other words + Tuples provides a way to represent a group of items, where the group of items cannot be changed in any way. The syntax of a + Tuple is also very similar to + List. A + Tuple is represented with the list of items, called elements of the + Tuple separated by comma, with the entire list being enclosed in parenthesis. It is not compulsory to use parenthesis around a + Tuple but it may be necessary in some of the cases: +

+
>>> a = 1, 2, 3
+>>> a
+(1, 2, 3)
+>>> b = 1,
+>>> b
+(1,)
+
+
+

It is interesting to note the second example. Just a value followed by a comma automatically makes that an element of a + Tuple with only one element. It is also important to note that, irrespective of input having a parenthesis, the output always has a parenthesis. +

+

The first example is also known as + Tuple packing, because values are being packed into a tuple. It is also possible to do + Tuple unpacking which is more interesting. It is better to understand that by example. Say we have a co-ordinate pair from which we need to separate x and y co-ordinates: +

+
>>> a = (1, 2)
+>>> x, y = a
+>>> x
+1
+>>> y
+2
+
+
+

Tuple unpacking also has several other use-cases of which the most interesting one is to swap the values of two variables. Using programming languages like C would require anywhere around 10 lines of code and an extra temporary variable to do this (including all the #include stuff). Python does it in the most intuitive way in just one line. Say we want to swap the co-ordinates in the above example: +

+
>>> x, y = y, x
+>>> x
+2
+>>> y
+1
+
+
+
+

+5.1. Common Tuple Operations

+

There is no need to introduce all the + Tuple operations again, since + Tuples support the following operations that + List supports in exactly the same way: +

+
    +
  • Indexing

  • +
  • Concatenating

  • +
  • Slicing

  • +
  • Membership

  • +
  • Multiplication

  • +
  • Length, Maximum, Minimum

  • +
+

The following examples illustrate the above operations:

+
>>> a = (1, 2, 3, 4, 5, 6)
+>>> a[5]
+6
+>>> b = (7, 8, 9)
+>>> a + b
+(1, 2, 3, 4, 5, 6, 7, 8, 9)
+>>> a[3:5]
+(4, 5)
+>>> 5 in a
+True
+>>> c = (1,)
+>>> c * 5
+(1, 1, 1, 1, 1)
+>>> len(a)
+6
+>>> max(a)
+6
+>>> min(a)
+1
+
+
+

However the following + List operations are not supported by + Tuples because + Tuples cannot be changed once they are created: +

+
    +
  • Changing elements

  • +
  • Deleting elements

  • +
  • Assigning to slices

  • +
+

Similarity to + Lists leads to the questions like, why not + Lists only? Why do we even want + Tuples? Can we do the same with + Lists? And the answer is + Yes we can do it, but + Tuples are helpful at times, like we can return Tuples from functions. They are also returned by some built-in functions and methods. And also there are some use cases like co-ordinate among other things. So + Tuples are helpful. +

+
+
+
+

+6. Additional Syntax

+

The following additional syntax are introduced to make it easier to operate on + Lists. +

+
+

+6.1. range()

+

The + range function takes at least one argument and 2 additional optional arguments. If two or more arguments are specified, the range function returns a list of natural numbers starting from the first argument passed to it to the second argument. The third argument, if specified is used as a step. Suppose only one argument is specified, then + range function returns a list of natural numbers starting from 0 upto the argument specified: +

+
>>> range(5, 10, 2)
+[5, 7, 9]
+>>> range(2, 15)
+[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
+>>> range(12)
+[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
+
+
+
+
+

+6.2. for

+

The + for keyword is used as a part of the looping construct. Unlike for loops in other languages, Python's for is used to iterate through the elements of sequences like + Lists, + Tuples, + Dictionaries, etc. The syntax of the for loop consists of + for, followed by a variable to hold the individual or the current element of the list during iteration and + in, followed by the sequence and a semicolon(':') The next line which is part of the + for loop, i.e the statements that are part of the loop should start with a new intend: +

+
>>> names = ['Guido', 'Alex', 'Tim']
+>>> for name in names:
+...   print "Name =", name
+... 
+Name = Guido
+Name = Alex
+Name = Tim
+
+
+
+
+
+
+

+7. Conclusion

+

This section on + Lists and + Tuples introduces almost all the necessary machinary required to work on + Lists and + Tuples. Topics like how to use these data structures in bigger more useful programs will be introduced in the subsequent chapters. +

+
+
+ + +