£199.99 £139.99 for one year of Unlimited learning. Offer ends on 28 February 2023 at 23:59 (UTC). T&Cs apply

# General Python Syntax

General introduction to Python

## Introduction to Python

Python is an interpreted computer language, which has become increasingly popular among data scientists. It was designed to emphasise code readability, by using white­space indentation to define code blocks rather than curly brackets or keywords. In particular, it is widely used both at the prototyping level and professional development.

An example of the most basic operations include:

• Subtraction: (10-4)
• Multiplication: (10*4)
• Exponentiation: (10**4 (=10000))
• Division: (10 / 4)

Note that the division (10/4) will give you (2) as both numbers are integers. To include the full digits of this operation, it is necessary to perform 10 / float(4)’

Conditional statements are widely used to select specific commands if some conditions are satisfied. The following is an example of conditional statements.

x=3# if statement if x > 0: # note the ":" after the conditional. # print "positive" if x is greater than zero. The block of coding, which has to be performed if the conditional is satisfied, is indented print('positive') else:	print('zero or negative')# if/elif/else statementif x > 0: 	print('positive')elif x == 0: 	print('zero')else: 	print('negative')# single-line if statement (sometimes discouraged)if x > 0:  print('positive')

Try to understand the above code. What do you notice?
Try to remove the indentation of the command print(‘positive’) after the if x>0: statement. What happens?

Experiment with the code and try different conditions. Also, explore different types of conditionals, such as while , etc.

## Lists and Dictionaries

Lists and dictionaries are also widely used in Python, which has various methods and libraries to allow their creation, manipulation and visualisation. The following code illustrates an example of a list.

## properties: ordered, iterable, mutable, can contain multiple data types# create an empty list (two ways)empty_list = [] empty_list = list()# create a listsimpsons = ['homer', 'marge', 'bart']# examine a listsimpsons[0] # print element 0 ('homer') len(simpsons) # returns the length (3)print(simpsons) # print the initial list# modify a list (does not return the list)simpsons.append('lisa') # append element to end simpsons.extend(['itchy', 'scratchy']) # append multiple elements to endprint(simpsons) # print the listsimpsons.remove('bart') # searches for first instance and removes itsimpsons.pop(0) # removes element 0 and returns itprint(simpsons) # print the listdel simpsons[0] # removes element 0 (does not return it)simpsons[0] = 'krusty' # replace element 0simpsons.insert(0, 'maggie') # insert element at index 0 (shifts everything right)print(simpsons) # print the list# concatenate lists (slower than 'extend' method)neighbors = simpsons + ['ned','rod','todd']# find elements in a listsimpsons.count('lisa') # counts the number of instances simpsons.index('itchy') # returns index of first instanceprint(simpsons) # print the list

Try to find other examples of list operations.
The following code provides an example of a dictionary.

# create an empty dictionary (two ways)empty_dict = {}empty_dict = dict()# create a dictionary (two ways)family = {'dad':'homer', 'mom':'marge', 'size':6}family = dict(dad='homer', mom='marge', size=6)# convert a list of tuples into a dictionarylist_of_tuples = [('dad','homer'), ('mom','marge'), ('size', 6)]family = dict(list_of_tuples)# examine a dictionaryfamily['dad'] # returns 'homer'len(family) # returns 3family.keys() # returns list: ['dad', 'mom', 'size']family.values() # returns list: ['homer', 'marge', 6]family.items() # returns list of tuples: [('dad', 'homer'), ('mom', 'marge'), ('size', 6)]print('marge' in family) # returns False (only checks keys)print(family) # print family# modify a dictionary (does not return the dictionary)family['cat'] = 'snowball' # add a new entryfamily['cat'] = 'snowball ii' # edit an existing entrydel family['cat'] # delete an entryfamily['kids'] = ['bart', 'lisa'] # value can be a listfamily.pop('dad') # removes an entry and returns the value ('homer')print(family) # print family

Find examples of other dictionary operations. What are the main differences between lists and dictionaries? Which do you prefer?

## Functions and Loops

Functions in Python can be used to define a code fragment, which can be called at any time.

# define a function with one argument and one return valuedef add_number_to_two(x): # note the ":"	return x + 2 # the return statements specifies the output of the method. Note the indentation.print(add_number_to_two(4)) # This returns 6# return two values from a single functiondef min_max(nums):	return min(nums), max(nums)# return values can be assigned to a single variable as a tuplenums = [1, 2, 3]min_max_num = min_max(nums) # min_max_num = (1, 3)# Simple loopfor i in range(3): # the range(n) command specifies a list of values from 0 to n-1	print(i)for j in range(5):	print(add_number_to_two(j))	

Find examples of other loops and functions.

## Basic Statistics with Python

Let (X = {x_{1}, ldots, x_{n}})
be a set of observation. The mean is defined as

[bar{X} = frac{1}{n} sum_{i=1}^{n} x_{i}.]

For example, for (X = {1,2,3,4}),

[bar{X} = frac{1+2+3+4}{4} = frac{10}{4} = 2.5]

Using Python we have

from __future__ import divisionX = [1,2,3,4]temp = 0for i in range(len(X)):	temp = temp + X[i]mean = temp/len(X)print(mean)# Creating a function 'mean'def mean(input_list):	temp = 0	for i in range(len(input_list)): temp = temp + input_list[i]	mean = temp/len(input_list)	return mean	print (mean(X))

We can also use specific Python libraries, which provide off-the-shelf functions and modules, such as Numpy

import numpyX = [1,2,3,4]mean = numpy.mean(X) # Find the meanstd = numpy.std(X) # Find the standard deviationprint(mean)print(std)

Explore what Numpy can do.

Hard exercise! Can you implement the standard deviation for (X=[1,2,3,4]) using first principles, rather than the NumPy library?

## Methods in Python

In Python, we can define fragments of code that can be invoked at any time. These are called methods and defined by the keyword def.
Consider, for example, the area of a circle (A = pi r^2),
where (pi = 3.1415926cdots) and (r) is its radius. For any circle, the only parameter that changes (A) is its radius (r). So we can write

[A(r) = pi r^2.]

In other words, by using (A(r)) rather than (A), we specify that the area (A) is a function of (r).
So, if we want to calculate the area of a circle with radius (r=2), the above Equation gives us that (A(r=2) = pi 2^2 = 4 pi = 12.57). Therefore, our input is (r=2) and the output will be the number evaluated by (A(r=2)).
This is how a method (or function) is defined in Python. We specify an input and output based on a sequence of steps. So the area equation can be written as

def A(r): # note the ":" and the indentation of the block of commands in the method	area = r*r*3.141592	return areaprint A(2)12.566368

Note the return statement. This specifies the output of the method.
The area of a square with side (l) is (A(l) = l^2). Define a method to find the area of any square.

## Vectors and Matrices in Python

Python has various libraries, which allow easy manipulation of vectors and matrices. However, as an example, let us create a Python code to evaluate the sum of two vectors using first principles

def vector_addition(v_1,v_2): sum = [] #need to initialise sum as an empty list if len(v_1) == len(v_2): #vector addition makes sense if they are both of the same length for i in range(len(v_1)): #consider each component temp = v_1[i]+v_2[i] #add the i-th component sum.append(temp) #add the sum of the two components to the vector sum else: print("The two vectors must have the same dimension!")  return sum a = [1,2,3]b = [-1,-2,-3]print(vector_addition(a,b))

Modify the above code to evaluate vector subtraction and scalar multiplication.