A list comprehension expression is a powerful way to process structures like our matrix.

To extract the second column of our sample matrix, grab rows by simple indexing because the matrix is stored by rows comprehension:

M = [[1, 2, 3], # A 3 ? 3 matrix, as nested lists [4, 5, 6], # Code can span lines if bracketed [7, 8, 9]] # from www . j a v a 2 s . c o m col2 = [row[1] for row in M] # Collect the items in column 2 print( col2 ) print( M ) # The matrix is unchanged

List comprehensions derive from set notation.

They build a new list by running an expression on each item in a sequence, one at a time, from left to right.

List comprehensions are coded in square brackets and are composed of an expression and a looping construct that share a variable name (row, here).

The preceding list comprehension means: "Give me row[1] for each row in matrix M, in a new list."

The result is a new list containing column 2 of the matrix.

M = [[1, 2, 3], # A 3 ? 3 matrix, as nested lists [4, 5, 6], # Code can span lines if bracketed [7, 8, 9]] # from ww w. j a va 2 s .c o m print( [row[1] + 1 for row in M] ) # Add 1 to each item in column 2 print( [row[1] for row in M if row[1] % 2 == 0] ) # Filter out odd items

The first operation here adds 1 to each item as it is collected.

The second uses an if clause to filter odd numbers out of the result using the % modulus expression (remainder of division).

List comprehensions make new lists of results, but they can iterate over any iterable object.

Here, for instance, we use list comprehensions to step over a hardcoded list of coordinates and a string:

M = [[1, 2, 3], # A 3 ? 3 matrix, as nested lists [4, 5, 6], # Code can span lines if bracketed [7, 8, 9]] # from ww w . j a v a 2 s .c om diag = [M[i][i] for i in [0, 1, 2]] # Collect a diagonal from matrix print( diag ) doubles = [c * 2 for c in 'test'] # Repeat characters in a string print( doubles )

These expressions can collect multiple values, as long as we wrap those values in a nested collection.

- Lists
- List Operations
- List Bounds Checking
- Using range with List comprehensions
- Enclosing a List comprehension in parentheses to create generators.