PY Unit II
PY Unit II
Output:
• The sum of squares is: 774
The range() Function
• The range() function returns a sequence of numbers, starting
from 0 by default, and increments by 1 (by default), and stops
before a specified number.
Syntax
• range(start, stop, step)
Parameter Values
• start Optional. An integer number specifying at which
position to start. Default is 0
• stop Required. An integer number specifying at which
position to stop (not included).
• step Optional. An integer number specifying the
incrementation. Default is 1
List
• Lists are used to store multiple items in a single
variable.
• Lists are one of 4 built-in data types in Python
used to store collections of data, the other 3
are Tuple, Set, and Dictionary, all with different
qualities and usage.
• Lists are created using square brackets:
Example
• thislist = ["apple", "banana", "cherry"]
print(thislist)
List Items
Ordered
• When we say that lists are ordered, it means that the items have a defined order, and that order will not change.
• If you add new items to a list, the new items will be placed at the end of the list.
Changeable
• The list is changeable, meaning that we can change, add, and remove items in a list after it has been created.
Allow Duplicates
• Since lists are indexed, lists can have items with the same value:
• thislist = ["apple", "banana", "cherry", "apple", "cherry"]
print(thislist)
List Length
• To determine how many items a list has, use the len() function:
• Example
• thislist = ["apple", "banana", "cherry"]
print(len(thislist))
• From Python's perspective, lists are defined as objects with the data type 'list':
• <class 'list'>
• Example
• What is the data type of a list?
• mylist = ["apple", "banana", "cherry"]
print(type(mylist))
The list() Constructor
• It is also possible to use the list() constructor when creating a new list.
• Example
• Using the list() constructor to make a List:
• thislist = list(("apple", "banana", "cherry")) # note the double round-brackets
print(thislist)
Python Collections (Arrays)
• There are four collection data types in the Python programming language:
• List is a collection which is ordered and changeable. Allows duplicate members.
• Tuple is a collection which is ordered and unchangeable. Allows duplicate members.
• Set is a collection which is unordered, unchangeable*, and unindexed. No duplicate
members.
• Dictionary is a collection which is ordered** and changeable. No duplicate
members.
Access Items
• List items are indexed and you can access them by referring to the index number:
• Example
• Print the second item of the list:
• thislist = ["apple", "banana", "cherry"]
print(thislist[1])
Negative Indexing
• You can specify a range of indexes by specifying where to start and where to end the
range.
• When specifying a range, the return value will be a new list with the specified items.
• Example
• Return the third, fourth, and fifth item:
• thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
print(thislist[2:5])
Range of Negative Indexes
• Specify negative indexes if you want to start the search from the end of the list:
• Example
• This example returns the items from "orange" (-4) to, but NOT including "mango" (-
1):
• thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
print(thislist[-4:-1])
Check if Item Exists
• To change the value of items within a specific range, define a list with the new values, and
refer to the range of index numbers where you want to insert the new values:
• Example
• Change the values "banana" and "cherry" with the values "blackcurrant" and "watermelon":
• thislist = ["apple", "banana", "cherry", "orange", "kiwi", "mango"]
thislist[1:3] = ["blackcurrant", "watermelon"]
print(thislist)
Insert Items
• To insert a new list item, without replacing any of the existing values, we can use
the insert() method.
• The insert() method inserts an item at the specified index:
• Example
• Insert "watermelon" as the third item:
• thislist = ["apple", "banana", "cherry"]
thislist.insert(2, "watermelon")
print(thislist)
Append Items
• To add an item to the end of the list, use the append() method:
• Example
• Using the append() method to append an item:
• thislist = ["apple", "banana", "cherry"]
thislist.append("orange")
print(thislist)
Insert Items
• To append elements from another list to the current list, use the extend() method.
• Example
• Add the elements of tropical to thislist:
• thislist = ["apple", "banana", "cherry"]
tropical = ["mango", "pineapple", "papaya"]
thislist.extend(tropical)
print(thislist)
Remove Specified Item
• You can loop through the list items by using a for loop:
• Example
• Print all items in the list, one by one:
• thislist = ["apple", "banana", "cherry"]
for x in thislist:
print(x)
Sort List Alphanumerically
• List objects have a sort() method that will sort the list alphanumerically, ascending, by default:
• Example
• Sort the list alphabetically:
• thislist = ["orange", "mango", "kiwi", "pineapple", "banana"]
thislist.sort()
print(thislist)
Sort Descending
• You cannot copy a list simply by typing list2 = list1, because: list2 will only be
a reference to list1, and changes made in list1 will automatically also be made in list2.
• There are ways to make a copy, one way is to use the built-in List method copy().
• Example
• Make a copy of a list with the copy() method:
• thislist = ["apple", "banana", "cherry"]
mylist = thislist.copy()
print(mylist)
Join Two Lists
• There are several ways to join, or concatenate, two or more lists in Python.
• One of the easiest ways are by using the + operator.
• Example
• Join two list:
• list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
Ordered
• When we say that tuples are ordered, it means that the items have a defined order, and that order will not
change.
Unchangeable
• Tuples are unchangeable, meaning that we cannot change, add or remove items after the tuple has been
created.
Allow Duplicates
• Since tuples are indexed, they can have items with the same value:
• Example
• Tuples allow duplicate values:
• thistuple = ("apple", "banana", "cherry", "apple", "cherry")
print(thistuple)
Tuple Length
• To determine how many items a tuple has, use the len() function:
• Example
• Print the number of items in the tuple:
• thistuple = ("apple", "banana", "cherry")
print(len(thistuple))
Create Tuple With One Item
• To create a tuple with only one item, you have to add a comma after the item, otherwise Python will not recognize it as a
tuple.
• Example
• One item tuple, remember the comma:
• thistuple = ("apple",)
print(type(thistuple))
#NOT a tuple
thistuple = ("apple")
print(type(thistuple))
Tuple Items - Data Types
• From Python's perspective, tuples are defined as objects with the data type 'tuple':
• <class 'tuple'>
• Example
• What is the data type of a tuple?
• mytuple = ("apple", "banana", "cherry")
print(type(mytuple))
The tuple() Constructor
• You can access tuple items by referring to the index number, inside square
brackets:
• Example
• Print the second item in the tuple:
• thistuple = ("apple", "banana", "cherry")
print(thistuple[1])
Negative Indexing
• You can specify a range of indexes by specifying where to start and where to end the
range.
• When specifying a range, the return value will be a new tuple with the specified items.
• Example
• Return the third, fourth, and fifth item:
• thistuple = ("apple", "banana", "cherry", "orange", "kiwi", "melon", "mango")
print(thistuple[2:5])
Range of Negative Indexes
• Specify negative indexes if you want to start the search from the end of the tuple:
• Example
• This example returns the items from index -4 (included) to index -1 (excluded)
• thistuple = ("apple", "banana", "cherry", "orange", "kiwi", "melon", "mango")
print(thistuple[-4:-1])
Check if Item Exists
• Once a tuple is created, you cannot change its values. Tuples are unchangeable, or immutable as it also is called.
• But there is a workaround. You can convert the tuple into a list, change the list, and convert the list back into a tuple.
• Example
• Convert the tuple into a list to be able to change it:
• x = ("apple", "banana", "cherry")
y = list(x)
y[1] = "kiwi"
x = tuple(y)
print(x)
Add Items
• Since tuples are immutable, they do not have a built-in append() method, but there are other ways to add items to a
tuple.
• 1. Convert into a list: Just like the workaround for changing a tuple, you can convert it into a list, add your item(s), and
convert it back into a tuple.
• Example
• Convert the tuple into a list, add "orange", and convert it back into a tuple:
• thistuple = ("apple", "banana", "cherry")
y = list(thistuple)
y.append("orange")
thistuple = tuple(y)
Add Items
• 2. Add tuple to a tuple. You are allowed to add tuples to tuples, so if you want to add one item, (or many),
create a new tuple with the item(s), and add it to the existing tuple:
• Example
• Create a new tuple with the value "orange", and add that tuple:
• thistuple = ("apple", "banana", "cherry")
y = ("orange",)
thistuple += y
print(thistuple)
Remove Items
• When we create a tuple, we normally assign values to it. This is called "packing" a
tuple:
• Example
• Packing a tuple:
• fruits = ("apple", "banana", "cherry")
Unpacking a Tuple
• Using Asterisk*
• If the number of variables is less than the number of values, you can add an * to the variable name and the values will be assigned to the
variable as a list:
• Example
• Assign the rest of the values as a list called "red":
• fruits = ("apple", "banana", "cherry", "strawberry", "raspberry")
print(green)
print(yellow)
print(red)
Loop Through a Tuple
• You can loop through the tuple items by using a for loop.
• Example
• Iterate through the items and print the values:
• thistuple = ("apple", "banana", "cherry")
for x in thistuple:
print(x)
Loop Through the Index Numbers
• You can also loop through the tuple items by referring to their index number.
• Use the range() and len() functions to create a suitable iterable.
• Example
• Print all items by referring to their index number:
• thistuple = ("apple", "banana", "cherry")
for i in range(len(thistuple)):
print(thistuple[i])
Using a While Loop
• You can loop through the tuple items by using a while loop.
• Use the len() function to determine the length of the tuple, then start at 0 and loop your way through the tuple items by referring to
their indexes.
• Remember to increase the index by 1 after each iteration.
• Example
• Print all items, using a while loop to go through all the index numbers:
• thistuple = ("apple", "banana", "cherry")
i=0
while i < len(thistuple):
print(thistuple[i])
i=i+1
Join Two Tuples
• Python has two built-in methods that you can use on tuples.
• count() Returns the number of times a specified value occurs in a tuple
• index() Searches the tuple for a specified value and returns the position of where
it was found
Set
Dictionary
• Dictionary items are ordered, changeable, and does not allow duplicates.
• Dictionary items are presented in key:value pairs, and can be referred to by using the key name.
• Example
• Print the "brand" value of the dictionary:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(thisdict["brand"])
Ordered or Unordered?
• Dictionaries are changeable, meaning that we can change, add or remove items
after the dictionary has been created.
• To determine how many items a dictionary has, use the len() function:
• Example
• Print the number of items in the dictionary:
• print(len(thisdict))
• From Python's perspective, dictionaries are defined as objects with the data type 'dict':
• <class 'dict'>
• Example
• Print the data type of a dictionary:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(type(thisdict))
The dict() Constructor
• You can access the items of a dictionary by referring to its key name, inside square brackets:
• Example
• Get the value of the "model" key:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = thisdict["model"]
There is also a method called get() that will give you the same result:
• Example
• Get the value of the "model" key:
• x = thisdict.get("model")
Get Keys
• The keys() method will return a list of all the keys in the dictionary.
• Example
• Get a list of the keys:
• x = thisdict.keys()
• The list of the keys is a view of the dictionary, meaning that any changes done to the dictionary will be reflected in the keys list.
Example
• Add a new item to the original dictionary, and see that the keys list gets updated as well:
• car = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = car.keys()
print(x) #before the change
car["color"] = "white"
print(x) #after the change
Get Values
• The values() method will return a list of all the values in the dictionary.
• Example
• Get a list of the values:
• x = thisdict.values()
• The list of the values is a view of the dictionary, meaning that any changes done to the dictionary will be reflected in the values list.
Example
• Make a change in the original dictionary, and see that the values list gets updated as well:
• car = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = car.values()
print(x) #before the change
car["year"] = 2020
print(x) #after the change
Get Items
• The items() method will return each item in a dictionary, as tuples in a list.
• Example
• Get a list of the key:value pairs
• x = thisdict.items()
• The returned list is a view of the items of the dictionary, meaning that any changes done to the dictionary will be reflected in the items list.
Example
• Make a change in the original dictionary, and see that the items list gets updated as well:
• car = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = car.items()
print(x) #before the change
car["year"] = 2020
print(x) #after the change
Check if Key Exists
• You can change the value of a specific item by referring to its key name:
• Example
• Change the "year" to 2018:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["year"] = 2018
Update Dictionary
• The update() method will update the dictionary with the items from the given argument.
• The argument must be a dictionary, or an iterable object with key:value pairs.
• Example
• Update the "year" of the car by using the update() method:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.update({"year": 2020})
Adding Items
• Adding an item to the dictionary is done by using a new index key and assigning a value to it:
• Example
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["color"] = "red"
print(thisdict)
Update Dictionary
• The update() method will update the dictionary with the items from a given argument. If the item does not exist, the item will be
added.
• The argument must be a dictionary, or an iterable object with key:value pairs.
• Example
• Add a color item to the dictionary by using the update() method:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.update({"color": "red"})
Removing Items
• The popitem() method removes the last inserted item (in versions before 3.7, a random item is removed
instead):
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.popitem()
print(thisdict)
Removing Items
• The del keyword removes the item with the specified key name:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict["model"]
print(thisdict)
Removing Items
Example
Example
• You can also use the values() method to return values of a dictionary:
• for x in thisdict.values():
print(x)
Example
• You can use the keys() method to return the keys of a dictionary:
• for x in thisdict.keys():
print(x)
Example
• Loop through both keys and values, by using the items() method:
• for x, y in thisdict.items():
print(x, y)
Copy a Dictionary
• You cannot copy a dictionary simply by typing dict2 = dict1, because: dict2 will only be a reference to dict1, and changes made in dict1 will
automatically also be made in dict2.
• There are ways to make a copy, one way is to use the built-in Dictionary method copy().
• Example
• Make a copy of a dictionary with the copy() method:
• thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
mydict = thisdict.copy()
print(mydict)
Copy a Dictionary
Creating a Function
• Calling a Function
• To call a function, use the function name followed by parenthesis:
• Example
• def my_function():
print("Hello from a function")
my_function()
Arguments
• The terms parameter and argument can be used for the same thing: information
that are passed into a function.
• From a function's perspective:
• A parameter is the variable listed inside the parentheses in the function definition.
• An argument is the value that is sent to the function when it is called.
Number of Arguments
• By default, a function must be called with the correct number of arguments. Meaning that if
your function expects 2 arguments, you have to call the function with 2 arguments, not more,
and not less.
• Example
• This function expects 2 arguments, and gets 2 arguments:
• def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil", "Refsnes")
Arbitrary Arguments, *args
• If you do not know how many arguments that will be passed into your function, add a * before
the parameter name in the function definition.
• This way the function will receive a tuple of arguments, and can access the items accordingly:
• Example
• If the number of arguments is unknown, add a * before the parameter name:
• def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
Keyword Arguments
• You can also send arguments with the key = value syntax.
• This way the order of the arguments does not matter.
• Example
• def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
Arbitrary Keyword Arguments, **kwargs
• If you do not know how many keyword arguments that will be passed into your function, add two
asterisk: ** before the parameter name in the function definition.
• This way the function will receive a dictionary of arguments, and can access the items accordingly:
• Example
• If the number of keyword arguments is unknown, add a double ** before the parameter name:
• def my_function(**kid):
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
Default Parameter Value
• You can send any data types of argument to a function (string, number, list, dictionary etc.), and it will be
treated as the same data type inside the function.
• E.g. if you send a List as an argument, it will still be a List when it reaches the function:
• Example
• def my_function(food):
for x in food:
print(x)
fruits = ["apple", "banana", "cherry"]
my_function(fruits)
Return Values
• function definitions cannot be empty, but if you for some reason have
a function definition with no content, put in the pass statement to avoid getting an
error.
• Example
• def myfunction():
pass
Recursion
• Python also accepts function recursion, which means a defined function can call itself.
• Recursion is a common mathematical and programming concept. It means that a function
calls itself. This has the benefit of meaning that you can loop through data to reach a result.
• The developer should be very careful with recursion as it can be quite easy to slip into writing
a function which never terminates, or one that uses excess amounts of memory or processor
power. However, when written correctly recursion can be a very efficient and mathematically-
elegant approach to programming.
Recursion
• In this example, tri_recursion() is a function that we have defined to call itself ("recurse"). We use the k variable as the data, which decrements (-1) every time we
recurse. The recursion ends when the condition is not greater than 0 (i.e. when it is 0).
• To a new developer it can take some time to work out how exactly this works, best way to find out is by testing and modifying it.
• Example
• Recursion Example
• def tri_recursion(k):
if(k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)