Introduced
We learned "LAMBDA operations, filter, reduce and Map" in the previous chapter, but compared to map, filter, reduce and LAMDBA, Guido van Rossum prefers to use a recursive construction list Comprehensio N). In this chapter we will cover the basic functionality of the recursive construct list (comprehension). The recursive construct list (comprehension) is added in Python 2.0. Essentially, it is a form of python used by mathematicians to implement well-known markup collections.
Mathematically, the number of squares of natural numbers is:{x2 | x∈} or plural:{(x, y) | x∈?∧y∈?}.
In Python, recursive construction lists (list comprehension) are an elegant way to define and create lists, which are often collections of constraints, not a collection of all cases.
for function map (), filter (), and reduce (), the recursive construct list (comprehension) is a complete lambda replacement. For most people, the syntax for recursive construction lists (list comprehension) is easier for people to grasp.
Lifting columns
In the LAMDBA and map () chapter, we have designed the map () function to convert the value of Celsius to the value of Fahrenheit and its inverse function. By using a recursive construct list comprehension, you can say:
>>> Celsius = [39.2, 36.5, 37.3, 37.8] for in Celsius]print fahrenheit[102.56, 97.700000000000003, 99.140000000000001, 100.03999999999999]
The following recursive construct lists (list comprehension) Create the Pythagorean ternary group:
for inch for inch for inch if x**2 + y**2 = = Z**2[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (10), (+, +), (+, +), (+, +),
Two cross-product of a set:
>>> colours = ["Red","Green","Yellow","Blue" ]>>> things = [" House","Car","Tree" ]>>> coloured_things = [(x, Y) forXinchColours forYinchthings]>>>Printcoloured_things[('Red',' House'), ('Red','Car'), ('Red','Tree'), ('Green',' House'), ('Green','Car'), ('Green','Tree'), ('Yellow',' House'), ('Yellow','Car'), ('Yellow','Tree'), ('Blue',' House'), ('Blue','Car'), ('Blue','Tree')]>>>
Recursive construction Generator (Generator comprehension)
The Recursive construction generator (generator comprehension) was introduced in Python2.6. They are a simple build expression enclosed in parentheses, except that its syntax and work are much like a recursive construct list (lists comprehension), but a recursive construction generator (generator Comprehension) returns a generator instead of a list.
for in range)print0xb7307aa4>>>> x = list (x)Print 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
Some of the more advanced examples
Use the Eratosthenes sieve method (Sieve of Eratosthenes) to calculate prime numbers from 1 to 100:
for inch for in range (i*2, +, i)]for in ifnot in Noprimes] print primes[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 7 9, the.
We write the previous example in a more popular format, so we can calculate the list of prime numbers of any number n:
from Import sqrt>>> n = 100>>> sqrt_n = int (sqrt (n)) for in range (i*2, n, i)]
If we go to see the content of No_primes, we will find a problem. Here are a number of repeating elements in this list:
>>> no_primes[4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 5 0, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 6, 9, 12, 15, 18, 21, 2 4, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 , 75, 80, 85, 90, 95, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, -------------------------98, +,-----------------
This intolerable problem will be resolved in the recursive construction set (set comprehension), which we will explain in the next section
Recursive construction Set (set comprehension)
The recursive construction set (set comprehension) is very similar to a recursive construction list (lists comprehension), but returns a collection instead of a list. Syntactically, we will use curly braces instead of square brackets to create a collection. The recursive construction set (set comprehension) is the correct way to resolve the problem in the previous section. We can create a set of non-mass numbers that do not have duplicate elements:
>>> fromMathImportsqrt>>> n = 100>>> sqrt_n =Int (sqrt (n))>>> no_primes = {J forIinchRange (2,sqrt_n) forJinchRange (i*2, N, i)}>>>no_primes{4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48 , 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99}>>> primes = {i forIinchRange (N)ifI not inchNo_primes}>>>Print(primes) {0,1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}>>>
Using recursive functions to calculate prime numbers The following Python script uses a recursive function to create prime numbers, and his function is to examine multiple primes of a square root to N:
fromMathImportsqrtdefprimes (n):ifn = =0:return [] elifn = = 1: return[1] Else: P=primes (int (sqrt (n) )) no_p= {J forIinchP forJinchRange (i*2, N, i)} P= {X forXinchRange (2, N)ifX not inchNo_p}returnPPrint(Primes (40))
Reprint please indicate the source
Original (English): http://www.python-course.eu/list_comprehension.php
(Chinese): http://www.cnblogs.com/reanote/p/python_list_comprehension.html
Python's Recursive construction list (listing comprehension)