Learning Python: Programming and Data Structures- Tutorial 15- Generators and List Comprehensions


1. Generator Functions in Python



# We will generate the cubes of (1-10) using a simple generator function of our own, and using a python generator which uses the Yield keyword for lazy evaluation

def cube(n): return n**3 def simplifiedGenerator(n): generatedResults = [] currentN = 1 while currentN <= n: generatedResults.append(cube(currentN)) currentN += 1 return generatedResults

# This is an example of Lazy evaluation- using Python's Generators

# This code does not run when called initially # It will only return a "Generator" object # From that object we can collect the list items, one by one def generatorUsingYield(n): currentN = 1 while currentN <= n: yield cube(currentN) currentN += 1 # Using the Simplified Generator Code, we start with numbers x = (1..10) and for each of them, we generate x^3 print "Using the Simplified Generator Code, we start with numbers x = (1..10) and for each of them, we generate x^3" # Resulting list using simplified generator print simplifiedGenerator(10) # Now we use the generator code which uses yield # After this, only the generator object will be returned print "Result using the Generator function with Yield" generatedValues = generatorUsingYield(10) print "We will traverse through the values from the generator object"

# Now, we actually compute and display the values from the generator object

print [i for i in generatedValues]

Output from the above program:

~/work/pythontutorials$ python generators.py 
Using the Simplified Generator Code, we start with numbers x = (1..10) and for each of them, we generate x^3
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
Result using the Generator function with Yield
We will traverse through the values from the generator object
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

2. List Comprehensions



# This Program demonstrates List Comprehensions in Python

# We will invoke this function to cube numbers def cube(n): return n**3 # Let us start by creating a list of numbers 1..10 originalList = xrange(1,11) print "Original (Starting) list of numbers (1 to 10)" for x in originalList: print x

# Let us generate the cubes of 1..10 using the simple, standard for loop

print "Displaying the Cubes of 1..10 using the standard for-loop notation" for i in xrange(1,11): print(cube(i)) # Now let us use List Comprehensions to generate the cubes print "Displaying the cubes by using List Comprehensions" cubesUsingListComprehensions = [cube(x) for x in originalList] print cubesUsingListComprehensions


Output from the above program:

~/work/pythontutorials$ python listComprehensions.py 
Original (Starting) list of numbers (1 to 10)
1
2
3
4
5
6
7
8
9
10
Displaying the Cubes of 1..10 using the standard for-loop notation
1
8
27
64
125
216
343
512
729
1000
Displaying the cubes by using List Comprehensions
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]