Python & Perl
Lecture 06

Department of Computer Science
Utah State University
Recap
●
●
●
●
●

Types in Python
Built-in Sequences
List: Python's Workhorse
Function parameters
Scoping
Outline
●

Object Comparison

●

Loops

●

Dictionaries
Object Comparison
Object Comparison
●

●

The operators <, >, ==, >=, <=, and != compare the values of
two objects
The objects need not have the same type
Object Comparison
●

●

●

●

●

Numbers are compared arithmetically
Strings are compared lexicographically using the numeric
equivalents of their characters
Tuples and lists are compared lexicographically using
comparison of corresponding elements
Sequences, to compare equal, must be of the same type and
have the same length and the corresponding elements must
compare equal
Mappings (dictionaries) compare equal if and only if their sorted
(key, value) lists compare equal
cmp(x, y)
●

cmp(x, y) is a built-in function

●

cmp(x, y) returns


if

x < y



1

if

x > y


●

-1
0

if

x == y

cmp(x, y) provides the default comparison function for
sort()
cmp(x, y)
>>> cmp(1, 2)
-1
>>> cmp(2, 1)
1
>>> cmp(1, 1)
0
>>> cmp('a', 'b')
-1
>>> cmp('b', 'a')

1
Customizing sort()
●

It is possible to customize sort()

●

Customization requires two steps:


Define a new comparison function that takes two arguments and returns three integers according to
the cmp() convention



Pass the function object (just the function name with
no parenthesis) to sort()
Example 01: Customizing sort()
●

Define a comparator function:
def neg_cmp(x, y):
return -cmp(x,y)

●

Pass the comparator function to sort():
>>> z = [1, 2, 3, 4, 5]
>>> z.sort(neg_cmp)
>>> z
[5, 4, 3, 2, 1]
Loops
C/C++ while vs. Python while
●

Common C/C++ idiom:
while ((x = next()) != NULL) {
// Some code
}

●

Python while loops may not have assignments in the
test statements:
x = next()
while x:
## some code
x = next()
Python while Example
## print numbers from 1 upto 100
x = 1
while x <= 100:
print x
x += 1
Problem

Write a Python script that asks the user for his/her
name until the user actually enters a string
Coding Solution 1
### keep asking for name until the user types
### something; not '' evaluates to True

name = ''
while not name:
name = raw_input('Please enter your name: ')
print 'Hello, %s!' % name
Coding Solution 2
### keep asking for name until the user types
### something that does not consist only of white
### spaces; not '' evaluates to True

name=''
while not name.strip():
name=raw_input('Please enter your name: ')
print 'Hello, %s!' % name
for Loops
●

Syntax
for targetList in IterableObject:
code block

●

●

IterableObject is (usually) a sequence and
returns its elements one at a time in order
targetList is one or more comma separated
reference names
for Loop Example
## prints (1, 2) and (3, 4) on separate
## lines
for x in ((1, 2), (3, 4)):
print x
## prints 1 2 and 3 4 on separate lines
for x,y in ((1, 2), (3, 4)):
print x, y
Loop Else
●

Both for loops and while loops have an extended form not usually seen in
other languages
while expression:
code block
else:
code block
for targetList in IterableObject:
code block
else:
code block
Using Loop Else
●

The else block of a loop is run if the loop exits normally

●

Use of continue allows the loop to exit normally

●

If the loop exits because of a break, the else block is
not run
Builtin Functions Useful in Loops
range([start,] stop [, step])
range()
●

range() generates a list with values of an arithmetic progression

●

Syntax pattern 1: range(stop)
>>> range(5)

## start defaults to 0, step defaults to 1

[0, 1, 2, 3, 4]
>>> range(10) ## start defaults to 0, step defaults to 1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range()
●

range() generates a list with values of an arithmetic progression

●

Syntax pattern 2: range(start,stop )
>>> range(5, 10)

## step defaults to 1

[5, 6, 7, 8, 9]
>>> range(10, 20) ## step defaults to 1
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
range()
●

range() generates a list with values of an arithmetic progression

●

Syntax pattern 3: range(start,stop,step)
>>> range(1, 11, 2)

## odd numbers in [1, 10]

[1, 3, 5, 7, 9]
>>> range(9, -1, -2)

## odd numbers in [1, 10] from

## largest to smallest
[9, 7, 5, 3, 1]
>>> range(10, 0, -2)
[10, 8, 6, 4, 2]

## even numbers from 10 down to 1
## note 0 is not included but 10 is
xrange()
●

range() creates the entire list that contains each element of the
arithmetic progression

●

If the range is too large, this requires a large amount of memory

●

xrange() is an alternative to range() for dealing large ranges

●

●

xrange() uses the same arguments as range() but returns an iterable object that supports lazy iteration: generates each element
in the range one at a time
Bottom line: size of xrange() object is independent of the size
of the range
xrange()
>>> rng = xrange(10, 1000000)
>>> for x in rng:
if x > 999998:
print x
999999
Parallel Iteration
●

If you want to iterate over two sequences at the same
time
names=['a','b','c','d']
ages=[12,15,25,17]

●

To print the names with corresponding ages
for i in range(len(names)):
print names[i], 'is', ages[i], 'years old.'
zip(seq1 [, seq2 [...]] )
Zip
>>> names=['a','b','c','d']
>>> ages=[12,15,25,17]
>>> zip(names,ages)
[('a', 12), ('b', 15), ('c', 25), ('d', 17)]
>>> for name,age in zip(names,ages):
print name, 'is', age, 'years old'
zip()
●

zip() combines one or more sequences into a list of tuples where the n-th element of each tuple is the n-th element in the n-th sequence
>>> zip([1, 2], [3, 4])
[(1, 3), (2, 4)]
>>> zip([1, 2])
[(1,), (2,)]
>>> zip('ab', [3, 4])
[('a', 3), ('b', 4)]
zip()
●

The length of the list returned by zip() is the length of the
shortest sequence
>>> zip([1, 2], [3, 4, 5])
[(1, 3), (2, 4)]
>>> zip('abc', [3, 4])
[('a', 3), ('b', 4)]
zip()
●

zip() can handle ranges
>>> zip(xrange(1, 10), xrange(11, 20))
[(1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8,
18), (9, 19)]
>>> zip(range(1, 5), range(6, 10), range(11, 15))
[(1, 6, 11), (2, 7, 12), (3, 8, 13), (4, 9, 14)]
zip()
●

zip() can be used in sequence unpacking
>>> x, y = [zip(range(1, 5), range(6, 10)), zip(range(-5, 0),
range(-10, -5))]
>>> x
[(1, 6), (2, 7), (3, 8), (4, 9)]
>>> y
[(-5, -10), (-4, -9), (-3, -8), (-2, -7), (-1, -6)]
enumerate(iterable [, start])
enumerate()
●

●

enumerate() returns an enumeration object
Enumeration objects support the next() method that returns the
tuple (i, j) where i is the number of element j in the enumeration
object
>>> en01 = enumerate(['a', 'b'])
>>> en01.next()
(0, 'a')
>>> en01.next()
(1, 'b')
>>> en01.next()

## error
Dictionaries
Dictionary
●

Dictionary is a set of key-value pairs

●

Dictionaries are mutable

●

●

Dictionary is the only type built-in mapping data
structure
The keys are not ordered
Basic Syntax
●

Dictionary is defined by { }
emptyDict = {} ## defines empty dictionary

●

A key-value pair is defined as key colon value
dict = {'one' : 1}

●

Multiple key-value pairs are separated by commas
dict = {'one' : 1, 'two' : 2, 'three' : 3}
Keys and Values
●

Keys can be any immutable objects: numbers,
characters, tuples, and strings

●

Lists and dictionaries cannot be keys

●

Values can be any objects

●

Dictionaries can be nested, i.e., there can be a
dictionary within another dictionary
Example
box = {'size'

: {'height' : 10,
'width' : 20},

'isCardboard' : True,
'color'
'contents'

: 'red',
: ['nail',
'hammer',
'screw']}
Access
>>> box['size'] # must retrieve on key that exists
{'width': 20, 'height': 10}
>>> box['size']['width']
20
>>> box['contents']
['nail', 'hammer', 'screw']
>>> box['contents'][-1]
'screw'
Access
>>> box.hasKey('size')
True
>>> box.items() # do it only on small dictionaries
[('color', 'red'), ('isCardboard', True), ('contents', ['nail',
'hammer', 'screw']), ('size', {'width': 20, 'height': 10})]
>>> box.items()[0]
('color', 'red')
>>> box.items()[0][-1]
'red'
Adding Key-Value Pairs
●

You can add new key value pairs to the previously
created dictionary
my_dict = {}
for c in 'abcdefg':
my_dict[c.upper()] = c
>>> my_dict
{'A': 'a', 'C': 'c', 'B': 'b', 'E': 'e', 'D': 'd', 'G': 'g', 'F': 'f'}
>>> my_dict[(1, 2)] = [1, 2]
>>> my_dict[(1, 2)]
[1, 2]
Construction
●

The constructor dict() can be used to create dictionaries from a
sequence of two-item sequences
>>> my_dict2 = dict([['A', 'a'], ['B', 'b'], ['C', 'c']])
>>> my_dict2
{'A': 'a', 'C': 'c', 'B': 'b'}
>>> my_dict3 = dict([('A', 'a'), ('B', 'b'), ('C', 'c')])
>>> my_dict3
{'A': 'a', 'C': 'c', 'B': 'b'}
>>> my_dict4 = dict((('A', 'a'), ('B', 'b'), ('C', 'c')))
>>> my_dict4
{'A': 'a', 'C': 'c', 'B': 'b'}
Construction
●

●

●

The constructor dict() can be used to create
dictionaries from keyword-value pairs
The keyword-value pair has the following syntax:
keyword = value
Keywords are converted into strings
>>> my_dict5 = dict(first_name = "John",
last_name = "Nicholson")
>>> my_dict5
{'first_name': 'John', 'last_name': 'Nicholson'}
Checking for Keys
●

Option 1: key in dictionary
>>> my_dict = dict(first_name = "John", last_name =
"Nicholson")
>>> "first_name" in my_dict
True
>>> "middle_name" not in my_dict
True

●

Option 2: dictionary.has_key(<key>)
>>> my_dict.has_key('first_name')
True
Safe Access with get()
●

dict.get() is similar to use dict[] but safer

●

Syntax: dict.get(key[, default])

●

●

●

dict[key] returns the value of key in dict or throws
error if key is not in dict
dict.get(key) returns value of key in dict or None if
key is not in dict
dict.get(key, default) returns value of key in dict
or default if key is not in dict
Example
>>> my_dict = {'one' : 1, 'two' : ['a', 'b', 'c']}
>>> my_dict['one']
1
>>> my_dict['three']

## error

>>> my_dict.get('three') ## None (nothing) returned
>>> my_dict.get('three', 'not in dict')
'not in dict'

## default 'not in dict' returned
Clearing Dictionaries
>>> my_dict = { }
>>> my_dict['one'] = [1, 2, 3]
>>> my_dict['two'] = ['a', 'b', 'c']
>>> my_dict
{'two': ['a', 'b', 'c'], 'one': [1, 2, 3]}
>>> my_dict.clear()
>>> my_dict
{}
Shallow Copying
●

The method copy() returns a shallow copy of the dictionary
my_dict = {'one' : 1, 'two' : ['a', 'b', 'c']}
my_dict2 = my_dict.copy()

print 'shallow copying:', my_dict, my_dict2
del my_dict2['two'][-1]
print 'shallow copying:', my_dict, my_dict2

Output:
shallow copying: {'two': ['a', 'b', 'c'], 'one': 1} {'two': ['a', 'b', 'c'], 'one': 1}
shallow copying: {'two': ['a', 'b'], 'one': 1} {'two': ['a', 'b'], 'one': 1}
Deep Copying
●

The method deepcopy() returns a deep copy of the dictionary
from copy import deepcopy
my_dict3 = {'one' : 1, 'two' : ['a', 'b', 'c']}
my_dict4 = deepcopy(my_dict3)

print 'deep copying:', my_dict3, my_dict4
del my_dict4['two'][-1]
print 'deep copying:', my_dict3, my_dict4

Output:
deep copying: {'two': ['a', 'b', 'c'], 'one': 1} {'two': ['a', 'b', 'c'], 'one': 1}
deep copying: {'two': ['a', 'b', 'c'], 'one': 1} {'two': ['a', 'b'], 'one': 1}
Dictionary Creation From Keys
●

The method fromkeys() creates a dictionary from keys each of
which maps to None
>>> d = {}.fromkeys(['key1', 'key2'])
>>> d
{'key2': None, 'key1': None}
>>> d['key1'] = 'value1'
>>> d['key2'] = 'value2'
>>> d
{'key2': 'value2', 'key1': 'value1'}
Deleting Keys with del()
●

You can use del() to delete key-value pairs from
dictionaries
>>> my_dict
{0: 0, 1: 1, 2: 4, 3: 9}
>>> del my_dict[2]
>>> my_dict
{0: 0, 1: 1, 3: 9}
Reading & References
●

●

●

www.python.org
Ch 03 (Strings), M. L. Hetland. Beginning Python From
nd
Novice to Professional, 2 Ed., APRESS
Ch 05 (Object Comparison, Loops), M. L. Hetland. Beginning Python From Novice to Professional, 2nd Ed., APRESS

More Related Content

PDF
A tour of Python
PDF
Scala Functional Patterns
PPTX
Java notes 1 - operators control-flow
PDF
LeetCode April Coding Challenge
PDF
Arrays in C
PDF
[1062BPY12001] Data analysis with R / week 2
PDF
Python programming : Standard Input and Output
PPTX
18. Java associative arrays
A tour of Python
Scala Functional Patterns
Java notes 1 - operators control-flow
LeetCode April Coding Challenge
Arrays in C
[1062BPY12001] Data analysis with R / week 2
Python programming : Standard Input and Output
18. Java associative arrays

What's hot (20)

PDF
Leet Code May Coding Challenge - DataStructure and Algorithm Problems
PDF
Functional programming with haskell
PPTX
Ggplot2 v3
PPTX
Python programming Part -6
PDF
Thinking Functionally In Ruby
PPT
PDBC
PPTX
Parts of python programming language
PPTX
Python programming: Anonymous functions, String operations
PDF
Introduction to haskell
PDF
Beginning Haskell, Dive In, Its Not That Scary!
PDF
Postgresql 9.3 overview
PDF
Python3 cheatsheet
PPS
CS101- Introduction to Computing- Lecture 38
PPTX
R programming
PDF
Array&amp;string
PDF
Python 2.5 reference card (2009)
PDF
Functional Programming by Examples using Haskell
DOCX
Array
PPTX
19. Java data structures algorithms and complexity
Leet Code May Coding Challenge - DataStructure and Algorithm Problems
Functional programming with haskell
Ggplot2 v3
Python programming Part -6
Thinking Functionally In Ruby
PDBC
Parts of python programming language
Python programming: Anonymous functions, String operations
Introduction to haskell
Beginning Haskell, Dive In, Its Not That Scary!
Postgresql 9.3 overview
Python3 cheatsheet
CS101- Introduction to Computing- Lecture 38
R programming
Array&amp;string
Python 2.5 reference card (2009)
Functional Programming by Examples using Haskell
Array
19. Java data structures algorithms and complexity
Ad

Viewers also liked (8)

PPT
Ub0203 developing the skills of academic numeracy & it 2
PPTX
The New Data Security Risk
PPTX
Automated posting on facebook and twitter for IIMnet members
PDF
Cs3430 lecture 16
PPT
Jb slideshow!!
DOC
Exercicisdetransmissidemovimentambpolitges
PPT
UB0203 Developing the skills of Academic Numeracy & IT
PPTX
Presentación1
Ub0203 developing the skills of academic numeracy & it 2
The New Data Security Risk
Automated posting on facebook and twitter for IIMnet members
Cs3430 lecture 16
Jb slideshow!!
Exercicisdetransmissidemovimentambpolitges
UB0203 Developing the skills of Academic Numeracy & IT
Presentación1
Ad

Similar to Python lecture 05 (20)

PDF
python.pdf
PPT
python language programming presentation
PDF
Python Part 1
PDF
Processing data with Python, using standard library modules you (probably) ne...
PPTX
Python Workshop - Learn Python the Hard Way
PPT
Python basics to advanced in on ppt is available
PPTX
Python Tutorial Part 1
PDF
ppt_pspp.pdf
PDF
An overview of Python 2.7
PPTX
Python 101++: Let's Get Down to Business!
PDF
Python_ 3 CheatSheet
PPTX
python_computer engineering_semester_computer_language.pptx
PPT
ComandosDePython_ComponentesBasicosImpl.ppt
PPT
2025pylab engineering 2025pylab engineering
PDF
Introduction to Python
PPTX
scripting in Python
PDF
Python cheatsheat.pdf
PPTX
Python Training
PPT
Python tutorialfeb152012
PDF
Python 101 1
python.pdf
python language programming presentation
Python Part 1
Processing data with Python, using standard library modules you (probably) ne...
Python Workshop - Learn Python the Hard Way
Python basics to advanced in on ppt is available
Python Tutorial Part 1
ppt_pspp.pdf
An overview of Python 2.7
Python 101++: Let's Get Down to Business!
Python_ 3 CheatSheet
python_computer engineering_semester_computer_language.pptx
ComandosDePython_ComponentesBasicosImpl.ppt
2025pylab engineering 2025pylab engineering
Introduction to Python
scripting in Python
Python cheatsheat.pdf
Python Training
Python tutorialfeb152012
Python 101 1

More from Tanwir Zaman (15)

PDF
Cs3430 lecture 17
PDF
Cs3430 lecture 15
PDF
Cs3430 lecture 14
PDF
Cs3430 lecture 13
PDF
Python lecture 12
PDF
Python lecture 10
PDF
Python lecture 09
PDF
Python lecture 8
PDF
Python lecture 07
PDF
Python lecture 06
PDF
Python lecture 04
PDF
Python lecture 03
PDF
Python lecture 02
PDF
Python lecture 01
PDF
Python lecture 11
Cs3430 lecture 17
Cs3430 lecture 15
Cs3430 lecture 14
Cs3430 lecture 13
Python lecture 12
Python lecture 10
Python lecture 09
Python lecture 8
Python lecture 07
Python lecture 06
Python lecture 04
Python lecture 03
Python lecture 02
Python lecture 01
Python lecture 11

Recently uploaded (20)

PPTX
UCSP Section A - Human Cultural Variations,Social Differences,social ChangeCo...
PPTX
principlesofmanagementsem1slides-131211060335-phpapp01 (1).ppt
PPTX
Cite It Right: A Compact Illustration of APA 7th Edition.pptx
PPTX
Copy of ARAL Program Primer_071725(1).pptx
PPTX
PAIN PATHWAY & MANAGEMENT OF ACUTE AND CHRONIC PAIN SPEAKER: Dr. Rajasekhar ...
PPTX
ENGlishGrade8_Quarter2_WEEK1_LESSON1.pptx
PDF
IS1343_2012...........................pdf
PDF
CHALLENGES FACED BY TEACHERS WHEN TEACHING LEARNERS WITH DEVELOPMENTAL DISABI...
PPTX
Chapter-4-Rizal-Higher-Education-1-2_081545.pptx
PPTX
Single Visit Endodontics.pptx treatment in one visit
PPTX
climate change of delhi impacts on climate and there effects
PDF
LATAM’s Top EdTech Innovators Transforming Learning in 2025.pdf
PPTX
Unit1_Kumod_deeplearning.pptx DEEP LEARNING
PPTX
Neurological complocations of systemic disease
PDF
WHAT NURSES SAY_ COMMUNICATION BEHAVIORS ASSOCIATED WITH THE COMP.pdf
PPTX
GW4 BioMed Candidate Support Webinar 2025
PPTX
Approach to a child with acute kidney injury
PDF
GSA-Past-Papers-2010-2024-2.pdf CSS examination
PDF
Kalaari-SaaS-Founder-Playbook-2024-Edition-.pdf
PDF
Physical pharmaceutics two in b pharmacy
UCSP Section A - Human Cultural Variations,Social Differences,social ChangeCo...
principlesofmanagementsem1slides-131211060335-phpapp01 (1).ppt
Cite It Right: A Compact Illustration of APA 7th Edition.pptx
Copy of ARAL Program Primer_071725(1).pptx
PAIN PATHWAY & MANAGEMENT OF ACUTE AND CHRONIC PAIN SPEAKER: Dr. Rajasekhar ...
ENGlishGrade8_Quarter2_WEEK1_LESSON1.pptx
IS1343_2012...........................pdf
CHALLENGES FACED BY TEACHERS WHEN TEACHING LEARNERS WITH DEVELOPMENTAL DISABI...
Chapter-4-Rizal-Higher-Education-1-2_081545.pptx
Single Visit Endodontics.pptx treatment in one visit
climate change of delhi impacts on climate and there effects
LATAM’s Top EdTech Innovators Transforming Learning in 2025.pdf
Unit1_Kumod_deeplearning.pptx DEEP LEARNING
Neurological complocations of systemic disease
WHAT NURSES SAY_ COMMUNICATION BEHAVIORS ASSOCIATED WITH THE COMP.pdf
GW4 BioMed Candidate Support Webinar 2025
Approach to a child with acute kidney injury
GSA-Past-Papers-2010-2024-2.pdf CSS examination
Kalaari-SaaS-Founder-Playbook-2024-Edition-.pdf
Physical pharmaceutics two in b pharmacy

Python lecture 05

  • 1. Python & Perl Lecture 06 Department of Computer Science Utah State University
  • 2. Recap ● ● ● ● ● Types in Python Built-in Sequences List: Python's Workhorse Function parameters Scoping
  • 5. Object Comparison ● ● The operators <, >, ==, >=, <=, and != compare the values of two objects The objects need not have the same type
  • 6. Object Comparison ● ● ● ● ● Numbers are compared arithmetically Strings are compared lexicographically using the numeric equivalents of their characters Tuples and lists are compared lexicographically using comparison of corresponding elements Sequences, to compare equal, must be of the same type and have the same length and the corresponding elements must compare equal Mappings (dictionaries) compare equal if and only if their sorted (key, value) lists compare equal
  • 7. cmp(x, y) ● cmp(x, y) is a built-in function ● cmp(x, y) returns  if x < y  1 if x > y  ● -1 0 if x == y cmp(x, y) provides the default comparison function for sort()
  • 8. cmp(x, y) >>> cmp(1, 2) -1 >>> cmp(2, 1) 1 >>> cmp(1, 1) 0 >>> cmp('a', 'b') -1 >>> cmp('b', 'a') 1
  • 9. Customizing sort() ● It is possible to customize sort() ● Customization requires two steps:  Define a new comparison function that takes two arguments and returns three integers according to the cmp() convention  Pass the function object (just the function name with no parenthesis) to sort()
  • 10. Example 01: Customizing sort() ● Define a comparator function: def neg_cmp(x, y): return -cmp(x,y) ● Pass the comparator function to sort(): >>> z = [1, 2, 3, 4, 5] >>> z.sort(neg_cmp) >>> z [5, 4, 3, 2, 1]
  • 11. Loops
  • 12. C/C++ while vs. Python while ● Common C/C++ idiom: while ((x = next()) != NULL) { // Some code } ● Python while loops may not have assignments in the test statements: x = next() while x: ## some code x = next()
  • 13. Python while Example ## print numbers from 1 upto 100 x = 1 while x <= 100: print x x += 1
  • 14. Problem Write a Python script that asks the user for his/her name until the user actually enters a string
  • 15. Coding Solution 1 ### keep asking for name until the user types ### something; not '' evaluates to True name = '' while not name: name = raw_input('Please enter your name: ') print 'Hello, %s!' % name
  • 16. Coding Solution 2 ### keep asking for name until the user types ### something that does not consist only of white ### spaces; not '' evaluates to True name='' while not name.strip(): name=raw_input('Please enter your name: ') print 'Hello, %s!' % name
  • 17. for Loops ● Syntax for targetList in IterableObject: code block ● ● IterableObject is (usually) a sequence and returns its elements one at a time in order targetList is one or more comma separated reference names
  • 18. for Loop Example ## prints (1, 2) and (3, 4) on separate ## lines for x in ((1, 2), (3, 4)): print x ## prints 1 2 and 3 4 on separate lines for x,y in ((1, 2), (3, 4)): print x, y
  • 19. Loop Else ● Both for loops and while loops have an extended form not usually seen in other languages while expression: code block else: code block for targetList in IterableObject: code block else: code block
  • 20. Using Loop Else ● The else block of a loop is run if the loop exits normally ● Use of continue allows the loop to exit normally ● If the loop exits because of a break, the else block is not run
  • 23. range() ● range() generates a list with values of an arithmetic progression ● Syntax pattern 1: range(stop) >>> range(5) ## start defaults to 0, step defaults to 1 [0, 1, 2, 3, 4] >>> range(10) ## start defaults to 0, step defaults to 1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 24. range() ● range() generates a list with values of an arithmetic progression ● Syntax pattern 2: range(start,stop ) >>> range(5, 10) ## step defaults to 1 [5, 6, 7, 8, 9] >>> range(10, 20) ## step defaults to 1 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
  • 25. range() ● range() generates a list with values of an arithmetic progression ● Syntax pattern 3: range(start,stop,step) >>> range(1, 11, 2) ## odd numbers in [1, 10] [1, 3, 5, 7, 9] >>> range(9, -1, -2) ## odd numbers in [1, 10] from ## largest to smallest [9, 7, 5, 3, 1] >>> range(10, 0, -2) [10, 8, 6, 4, 2] ## even numbers from 10 down to 1 ## note 0 is not included but 10 is
  • 26. xrange() ● range() creates the entire list that contains each element of the arithmetic progression ● If the range is too large, this requires a large amount of memory ● xrange() is an alternative to range() for dealing large ranges ● ● xrange() uses the same arguments as range() but returns an iterable object that supports lazy iteration: generates each element in the range one at a time Bottom line: size of xrange() object is independent of the size of the range
  • 27. xrange() >>> rng = xrange(10, 1000000) >>> for x in rng: if x > 999998: print x 999999
  • 28. Parallel Iteration ● If you want to iterate over two sequences at the same time names=['a','b','c','d'] ages=[12,15,25,17] ● To print the names with corresponding ages for i in range(len(names)): print names[i], 'is', ages[i], 'years old.'
  • 29. zip(seq1 [, seq2 [...]] )
  • 30. Zip >>> names=['a','b','c','d'] >>> ages=[12,15,25,17] >>> zip(names,ages) [('a', 12), ('b', 15), ('c', 25), ('d', 17)] >>> for name,age in zip(names,ages): print name, 'is', age, 'years old'
  • 31. zip() ● zip() combines one or more sequences into a list of tuples where the n-th element of each tuple is the n-th element in the n-th sequence >>> zip([1, 2], [3, 4]) [(1, 3), (2, 4)] >>> zip([1, 2]) [(1,), (2,)] >>> zip('ab', [3, 4]) [('a', 3), ('b', 4)]
  • 32. zip() ● The length of the list returned by zip() is the length of the shortest sequence >>> zip([1, 2], [3, 4, 5]) [(1, 3), (2, 4)] >>> zip('abc', [3, 4]) [('a', 3), ('b', 4)]
  • 33. zip() ● zip() can handle ranges >>> zip(xrange(1, 10), xrange(11, 20)) [(1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)] >>> zip(range(1, 5), range(6, 10), range(11, 15)) [(1, 6, 11), (2, 7, 12), (3, 8, 13), (4, 9, 14)]
  • 34. zip() ● zip() can be used in sequence unpacking >>> x, y = [zip(range(1, 5), range(6, 10)), zip(range(-5, 0), range(-10, -5))] >>> x [(1, 6), (2, 7), (3, 8), (4, 9)] >>> y [(-5, -10), (-4, -9), (-3, -8), (-2, -7), (-1, -6)]
  • 36. enumerate() ● ● enumerate() returns an enumeration object Enumeration objects support the next() method that returns the tuple (i, j) where i is the number of element j in the enumeration object >>> en01 = enumerate(['a', 'b']) >>> en01.next() (0, 'a') >>> en01.next() (1, 'b') >>> en01.next() ## error
  • 38. Dictionary ● Dictionary is a set of key-value pairs ● Dictionaries are mutable ● ● Dictionary is the only type built-in mapping data structure The keys are not ordered
  • 39. Basic Syntax ● Dictionary is defined by { } emptyDict = {} ## defines empty dictionary ● A key-value pair is defined as key colon value dict = {'one' : 1} ● Multiple key-value pairs are separated by commas dict = {'one' : 1, 'two' : 2, 'three' : 3}
  • 40. Keys and Values ● Keys can be any immutable objects: numbers, characters, tuples, and strings ● Lists and dictionaries cannot be keys ● Values can be any objects ● Dictionaries can be nested, i.e., there can be a dictionary within another dictionary
  • 41. Example box = {'size' : {'height' : 10, 'width' : 20}, 'isCardboard' : True, 'color' 'contents' : 'red', : ['nail', 'hammer', 'screw']}
  • 42. Access >>> box['size'] # must retrieve on key that exists {'width': 20, 'height': 10} >>> box['size']['width'] 20 >>> box['contents'] ['nail', 'hammer', 'screw'] >>> box['contents'][-1] 'screw'
  • 43. Access >>> box.hasKey('size') True >>> box.items() # do it only on small dictionaries [('color', 'red'), ('isCardboard', True), ('contents', ['nail', 'hammer', 'screw']), ('size', {'width': 20, 'height': 10})] >>> box.items()[0] ('color', 'red') >>> box.items()[0][-1] 'red'
  • 44. Adding Key-Value Pairs ● You can add new key value pairs to the previously created dictionary my_dict = {} for c in 'abcdefg': my_dict[c.upper()] = c >>> my_dict {'A': 'a', 'C': 'c', 'B': 'b', 'E': 'e', 'D': 'd', 'G': 'g', 'F': 'f'} >>> my_dict[(1, 2)] = [1, 2] >>> my_dict[(1, 2)] [1, 2]
  • 45. Construction ● The constructor dict() can be used to create dictionaries from a sequence of two-item sequences >>> my_dict2 = dict([['A', 'a'], ['B', 'b'], ['C', 'c']]) >>> my_dict2 {'A': 'a', 'C': 'c', 'B': 'b'} >>> my_dict3 = dict([('A', 'a'), ('B', 'b'), ('C', 'c')]) >>> my_dict3 {'A': 'a', 'C': 'c', 'B': 'b'} >>> my_dict4 = dict((('A', 'a'), ('B', 'b'), ('C', 'c'))) >>> my_dict4 {'A': 'a', 'C': 'c', 'B': 'b'}
  • 46. Construction ● ● ● The constructor dict() can be used to create dictionaries from keyword-value pairs The keyword-value pair has the following syntax: keyword = value Keywords are converted into strings >>> my_dict5 = dict(first_name = "John", last_name = "Nicholson") >>> my_dict5 {'first_name': 'John', 'last_name': 'Nicholson'}
  • 47. Checking for Keys ● Option 1: key in dictionary >>> my_dict = dict(first_name = "John", last_name = "Nicholson") >>> "first_name" in my_dict True >>> "middle_name" not in my_dict True ● Option 2: dictionary.has_key(<key>) >>> my_dict.has_key('first_name') True
  • 48. Safe Access with get() ● dict.get() is similar to use dict[] but safer ● Syntax: dict.get(key[, default]) ● ● ● dict[key] returns the value of key in dict or throws error if key is not in dict dict.get(key) returns value of key in dict or None if key is not in dict dict.get(key, default) returns value of key in dict or default if key is not in dict
  • 49. Example >>> my_dict = {'one' : 1, 'two' : ['a', 'b', 'c']} >>> my_dict['one'] 1 >>> my_dict['three'] ## error >>> my_dict.get('three') ## None (nothing) returned >>> my_dict.get('three', 'not in dict') 'not in dict' ## default 'not in dict' returned
  • 50. Clearing Dictionaries >>> my_dict = { } >>> my_dict['one'] = [1, 2, 3] >>> my_dict['two'] = ['a', 'b', 'c'] >>> my_dict {'two': ['a', 'b', 'c'], 'one': [1, 2, 3]} >>> my_dict.clear() >>> my_dict {}
  • 51. Shallow Copying ● The method copy() returns a shallow copy of the dictionary my_dict = {'one' : 1, 'two' : ['a', 'b', 'c']} my_dict2 = my_dict.copy() print 'shallow copying:', my_dict, my_dict2 del my_dict2['two'][-1] print 'shallow copying:', my_dict, my_dict2 Output: shallow copying: {'two': ['a', 'b', 'c'], 'one': 1} {'two': ['a', 'b', 'c'], 'one': 1} shallow copying: {'two': ['a', 'b'], 'one': 1} {'two': ['a', 'b'], 'one': 1}
  • 52. Deep Copying ● The method deepcopy() returns a deep copy of the dictionary from copy import deepcopy my_dict3 = {'one' : 1, 'two' : ['a', 'b', 'c']} my_dict4 = deepcopy(my_dict3) print 'deep copying:', my_dict3, my_dict4 del my_dict4['two'][-1] print 'deep copying:', my_dict3, my_dict4 Output: deep copying: {'two': ['a', 'b', 'c'], 'one': 1} {'two': ['a', 'b', 'c'], 'one': 1} deep copying: {'two': ['a', 'b', 'c'], 'one': 1} {'two': ['a', 'b'], 'one': 1}
  • 53. Dictionary Creation From Keys ● The method fromkeys() creates a dictionary from keys each of which maps to None >>> d = {}.fromkeys(['key1', 'key2']) >>> d {'key2': None, 'key1': None} >>> d['key1'] = 'value1' >>> d['key2'] = 'value2' >>> d {'key2': 'value2', 'key1': 'value1'}
  • 54. Deleting Keys with del() ● You can use del() to delete key-value pairs from dictionaries >>> my_dict {0: 0, 1: 1, 2: 4, 3: 9} >>> del my_dict[2] >>> my_dict {0: 0, 1: 1, 3: 9}
  • 55. Reading & References ● ● ● www.python.org Ch 03 (Strings), M. L. Hetland. Beginning Python From nd Novice to Professional, 2 Ed., APRESS Ch 05 (Object Comparison, Loops), M. L. Hetland. Beginning Python From Novice to Professional, 2nd Ed., APRESS