Chapter9 Lists
Chapter9 Lists
Lists
9.1 Introduction to List
The data type list is an ordered sequence which is mutable and made up of one or more elements. Unlike a
string which consists of only characters, a list can have elements of different data types, such as integer,
float, string, tuple or even another list. Elements of a list are enclosed in square brackets and are separated by
comma. Like string indices, list indices also start from 0.
Example 9.1
#list1 is the list of six even numbers
>>> list1 = [2,4,6,8,10,12]
>>> print(list1)
[2, 4, 6, 8, 10, 12]
#list2 is the list of vowels
>>> list2 = ['a','e','i','o','u']
>>> print(list2)
['a', 'e', 'i', 'o', 'u']
#list3 is the list of mixed data types
>>> list3 = [100,23.5,'Hello']
>>> print(list3)
[100, 23.5, 'Hello']
#list4 is the list of lists called nested
#list
>>> list4 =[['Physics',101],['Chemistry',202],
['Maths',303]]
>>> print(list4)
[['Physics', 101], ['Chemistry', 202],
['Maths', 303]
Page | 1
>>> list1 = [2,4,6,8,10,12]
>>> list1[0] #return first element of list1
2
>>> list1[3] #return fourth element of list1
8
#return error as index is out of range
>>> list1[15]
IndexError: list index out of range
#an expression resulting in an integer index
>>> list1[1+4]
12
>>> list1[-1] #return first element from right
12
#length of the list list1 is assigned to n
>>> list1 = [2,4,6,8,10,12]
>>> n = len(list1)
>>> print(n)
6
#return the last element of the list1
>>> list1[n-1]
12
#return the first element of list1
>>> list1[-n]
2
Page | 2
#change/override the fourth element of list1
>>> list1[3] = 'Black'
>>> list1
#print the modified list list1
['Red', 'Green', 'Blue', 'Black']
9.2 List operations
The data type list allows manipulation of its contents through various operations as shown below.
9.2.1 Concatenation
Python allows us to join two or more lists using
concatenation operator depicted by the symbol +.
#list1 is list of first five odd integers
>>> list1 = [1,3,5,7,9]
#list2 is list of first five even integers
>>> list2 = [2,4,6,8,10]
#elements of list1 followed by list2
>>> list1 + list2
[1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
>>> list3 = ['Red','Green','Blue']
>>> list4 = ['Cyan', 'Magenta', 'Yellow' ,'Black']
>>> list3 + list4
['Red','Green','Blue','Cyan','Magenta', 'Yellow','Black']
If we want to merge two lists, then we should use an assignment statement to assign the merged list to
another list. The concatenation operator '+’ requires that the operands should be of list type only. If we try to
concatenate a list with elements of some other data type, TypeError occurs.
>>> list1 = [1,2,3]
>>> str1 = "abc"
>>> list1 + str1
TypeError: can only concatenate list (not "str") to list
Page | 3
9.2.2 Repetition
Python allows us to replicate a list using repetition operator depicted by symbol *.
>>> list1 = ['Hello']
#elements of list1 repeated 4 times
>>> list1 * 4
['Hello', 'Hello', 'Hello', 'Hello']
9.2.3 Membership
Like strings, the membership operators in checks if the element is present in the list and returns True, else
returns False.
>>> list1 = ['Red','Green','Blue']
>>> 'Green' in list1
True
>>> 'Cyan' in list1
False
The not in operator returns True if the element is not
present in the list, else it returns False.
>>> list1 = ['Red','Green','Blue']
>>> 'Cyan' not in list1
True
>>> 'Green' not in list1
False
9.2.4 Slicing
Like strings, the slicing operation can also be applied to lists.
>>> list1 =['Red','Green','Blue','Cyan', 'Magenta','Yellow','Black']
>>> list1[2:6]
['Blue', 'Cyan', 'Magenta', 'Yellow']
#list1 is truncated to the end of the list
>>> list1[2:20] #second index is out of range
['Blue', 'Cyan', 'Magenta', 'Yellow', 'Black']
Page | 4
>>> list1 =['Red','Green','Blue','Cyan', 'Magenta','Yellow','Black']
>>> list1[7:2]
[]
#first index > second index
#results in an empty list
#return sublist from index 0 to 4
>>> list1 =['Red','Green','Blue','Cyan', 'Magenta','Yellow','Black']
>>> list1[:5]
#first index missing
['Red','Green','Blue','Cyan','Magenta']
#slicing with a given step size
>>> list1[0:6:2]
['Red','Blue','Magenta'] #last index value(6) not included
#negative indexes
#elements at index -6,-5,-4,-3 are sliced
>>> list1 =['Red','Green','Blue','Cyan', 'Magenta','Yellow','Black']
>>> list1[-6:-2]
['Green','Blue','Cyan','Magenta']
#both first and last index missing
>>> list1[::2]
#step size 2 on entire list
['Red','Blue','Magenta','Black']
#negative step size
#whole list in the reverse order
>>> list1[::-1]
['Black','Yellow','Magenta','Cyan','Blue', 'Green','Red']
9.3 Traversing a List
We can access each element of the list or traverse a list using a for loop or a while loop.
(A) List Traversal Using for Loop:
>>> list1 = ['Red','Green','Blue','Yellow', 'Black']
Page | 5
>>> for item in list1:
print(item)
Output:
Red
Green
Blue
Yellow
Black
Another way of accessing the elements of the list is
using range() and len() functions:
>>> for i in range(len(list1)):
print(list1[i])
Output:
Red
Green
Blue
Yellow
Black
(B) List Traversal Using while Loop:
>>> list1 = ['Red','Green','Blue','Yellow', 'Black']
>>> i = 0
>>> while i < len(list1):
print(list1[i])
i += 1
Output:
Red
Green
Blue
Yellow
Black
Page | 6
9.4 List Methods and Built-In Functions
The data type list has several built-in methods that are useful in programming. Some of them are listed in
Table 9.1.
Page | 7
9.5 Nested Lists
When a list appears as an element of another list, it is called a nested list.
Example 9.2
>>> list1 = [1,2,'a','c',[6,7,8],4,9]
#fifth element of list is also a list
>>> list1[4]
[6, 7, 8]
To access the element of the nested list of list1, we have to specify two indices list1[i][j]. The first index i will
take us to the desired nested list and second index j will take us to the desired element in that nested list.
>>> list1[4][1]
7
#index i gives the fifth element of list1 #which is a list
#index j gives the second element in the #nested list
Page | 8
9.6 Copying Lists
Given a list, the simplest way to make a copy of the list is to assign it to another list.
>>> list1 = [1,2,3]
>>> list2 = list1
>>> list1
[1, 2, 3]
>>> list2
[1, 2, 3]
The statement list2 = list1 does not create a new list. Rather, it just makes list1 and list2 refer
to the same list object. Here list2 actually becomes an alias of list1. Therefore, any changes made to either of
them will be reflected in the other list.
>>> list1.append(10)
>>> list1
[1, 2, 3, 10]
>>> list2
[1, 2, 3, 10]
We can also create a copy or clone of the list as a distinct object by three methods. The first method uses
slicing, the second method uses built-in function list() and the third method uses copy() function of python
library copy.
Method 1
We can slice our original list and store it into a new variable as follows:
newList = oldList[:]
Example 9.3
>>> list1 = [1,2,3,4,5]
>>> list2 = list1[:]
>>> list2
[1, 2, 3, 4, 5]
Method 2
We can use the built-in function list() as follows:
newList = list(oldList)
Page | 9
EG:
List1=[10,20,30,40]
List2=list(list1)
>> list2
[10, 20, 30, 40]
Method 3
We can use the copy () function as follows:
import copy
#import the library copy
#use copy()function of library copy
newList = copy.copy(oldList)
Example 9.5
>>> import copy
>>> list1 = [1,2,3,4,5]
>>> list2 = copy.copy(list1)
>>> list2
[1, 2, 3, 4, 5]
Page | 10
list2[i] += 5
print('Reference of list Inside Function',id(list2))
#end of function
list1 = [10,20,30,40,50] #Create a list
print("Reference of list in Main",id(list1))
print("The list before the function call")
print(list1)
increment(list1) #list1 is passed as parameter to function
print("The list after the function call")
print(list1)
Output:
Reference of list in Main 70615968
The list before the function call
[10, 20, 30, 40, 50]
Reference of list Inside Function 70615968 #The id remains same
The list after the function call
[15, 25, 35, 45, 55]
Observe that, when we pass a list as an argument, we actually pass a reference to the list. Hence any change
made to list2 inside the function is reflected in the actual list list1.
(B) If the list is assigned a new value inside the function then a new list object is created and
it becomes the local copy of the function. Any changes made inside the local copy of the function
are not reflected back to the calling function.
Program 9-2 Program to increment the elements of the
list passed as parameter.
#Program 9-2
#Function to increment the elements of the list passed as argument
def increment(list2):
print("\nID of list inside function before assignment:",
id(list2))
list2 = [15,25,35,45,55] #List2 assigned a new list
print("ID of list changes inside function after assignment:",
Page | 11
id(list2))
print("The list inside the function after assignment is:")
print(list2)
#end of function
list1 = [10,20,30,40,50] #Create a list
print("ID of list before function call:",id(list1))
print("The list before function call:")
print(list1)
increment(list1) #list1 passed as parameter to function
print('\nID of list after function call:',id(list1))
print("The list after the function call:")
print(list1)
Output:
ID of list before function call: 65565640
The list before function call:
[10, 20, 30, 40, 50]
ID of list inside function before assignment:65565640
ID of list changes inside function after assignment:65565600
The list inside the function after assignment is:
[15, 25, 35, 45, 55]
ID of list after function call: 65565640
The list after the function call:
[10, 20, 30, 40, 50]
Page | 12
Program 9-4 A program to calculate average marks of n students using a function where n is
entered by the user.
#Function to calculate average marks of n students
def computeAverage(list1,n):
#initialize total
total = 0
for marks in list1:
#add marks to total
total = total + marks
average = total / n
return average
#create an empty list
list1 = []
print("How many students marks you want to enter: ")
n = int(input())
for i in range(0,n):
print("Enter marks of student",(i+1),":")
marks = int(input())
#append marks in the list
list1.append(marks)
average = computeAverage(list1,n)
print("Average marks of",n,"students is:",average)
Output:
How many students marks you want to enter:
5
Enter marks of student 1:
45
Page | 13
Enter marks of student 2:
89
Enter marks of student 3:
79
Enter marks of student 4:
76
Enter marks of student 5:
55
Average marks of 5 students is: 68.8
Program 9-5 Write a user-defined function to check if a number is present in the list or not. If the number is
present, return the position of the number. Print an appropriate message if the number is not present in the
list.
#Program 9-5
#Function to check if a number is present in the list or not [10,20,30,40,50]
def linearSearch(num,list1):
for i in range(0,len(list1)):
if list1[i] == num: #num is present
return i #return the position
return None #num is not present in the list
#end of function
list1 = [] #Create an empty list
print("How many numbers do you want to enter in the list: ")
maximum = int(input())
print("Enter a list of numbers: ")
for i in range(0,maximum):
n = int(input())
list1.append(n) #append numbers to the list
num = int(input("Enter the number to be searched: "))
result = linearSearch(num,list1)
if result is None:
print("Number",num,"is not present in the list")
else:
Page | 14
print("Number",num,"is present at",result + 1, "position")
Output:
How many numbers do you want to enter in the list:
5
Enter a list of numbers:
23
567
12
89
324
Enter the number to be searched:12
Number 12 is present at 3 position
9.8 List Manipulation
In this chapter, we have learnt to create a list and the different ways to manipulate lists. In the following
programs, we will apply the various list manipulation methods.
Program 9-3 Write a menu driven program to perform various list operations, such as:
• Append an element
• Insert an element
• Append a list to the given list
• Modify an existing element
• Delete an existing element from its position
• Delete an existing element with a given value
• Sort the list in ascending order
• Sort the list in descending order
• Display the list.
#Program 9-3
#Menu driven program to do various list operations
myList = [22,4,16,38,13] #myList already has 5 elements
choice = 0
while True:
print("The list 'myList' has the following elements", myList)
Page | 15
print("\nL I S T O P E R A T I O N S")
print(" 1. Append an element")
print(" 2. Insert an element at the desired position")
print(" 3. Append a list to the given list")
print(" 4. Modify an existing element")
print(" 5. Delete an existing element by its position")
print(" 6. Delete an existing element by its value")
print(" 7. Sort the list in ascending order")
print(" 8. Sort the list in descending order")
print(" 9. Display the list")
print(" 10. Exit")
choice = int(input("ENTER YOUR CHOICE (1-10): "))
#append element
if choice == 1:
element = int(input("Enter the element to be appended: "))
myList.append(element)
print("The element has been appended\n")
#insert an element at desired position
elif choice == 2:
element = int(input("Enter the element to be inserted: "))
pos = int(input("Enter the position:"))
myList.insert(pos,element)
print("The element has been inserted\n")
#append a list to the given list
elif choice == 3:
newList = eval(input( "Enter the elements separated by commas"))
myList.extend(list(newList))
print("The list has been appended\n")
#modify an existing element
elif choice == 4:
i = int(input("Enter the position of the element to be modified: "))
Page | 16
if i < len(myList):
newElement = int(input("Enter the new element: "))
oldElement = myList[i]
myList[i] = newElement
print("The element",oldElement,"has been modified\n")
else:
print("Position of the element is more than the length of list")
#delete an existing element by position
elif choice == 5:
i = int(input("Enter the position of the element to be deleted: "))
if i < len(myList):
element = myList.pop(i)
print("The element",element,"has been deleted\n")
else:
print("\nPosition of the element is more than the length
of list")
#delete an existing element by value
elif choice == 6:
element = int(input("\nEnter the element to be deleted: "))
if element in myList:
myList.remove(element)
print("\nThe element",element,"has been deleted\n")
else:
print("\nElement",element,"is not present in the list")
#list in sorted order
elif choice == 7:
myList.sort()
print("\nThe list has been sorted")
#list in reverse sorted order
elif choice == 8:
myList.sort(reverse = True)
Page | 17
print("\nThe list has been sorted in reverse order")
#display the list
elif choice == 9:
print("\nThe list is:", myList)
#exit from the menu
elif choice == 10:
break
else:
print("Choice is not valid")
print("\n\nPress any key to continue..............")
ch = input()
Output:
The list 'myList' has the following elements [22, 4, 16, 38, 13]
LIST OPERATIONS
1. Append an element
2. Insert an element at the desired position
3. Append a list to the given list
4. Modify an existing element
5. Delete an existing element by its position
6. Delete an existing element by its value
7. Sort the list in ascending order
8. Sort the list in descending order
9. Display the list
10. Exit
ENTER YOUR CHOICE (1-10): 8
The list has been sorted in reverse order
The list 'myList' has the following elements [38, 22, 16, 13, 4]
LIST OPERATIONS
1. Append an element
2. Insert an element at the desired position
3. Append a list to the given list
Page | 18
4. Modify an existing element
5. Delete an existing element by its position
6. Delete an existing element by its value
7. Sort the list in ascending order
8. Sort the list in descending order
9. Display the list
10. Exit
Page | 19