列表生成式

a = [1, 2, 3, 4, -1, -2]
b = [i for i in a if a > 0]

如果数据量很大,会产生一个庞大的结果。这时可以用生成器表达式:

b = (i for i in a if a > 0)

如果筛选的过程中涉及一些复杂的细节,可以使用内建的 filter() 函数:

values = ['1', '2', '3', 'N/A', '-', 5]

def is_int(val):
    try:
        x = int(val)
        return True
    except ValueErroe:
        return False


ivals = list(filter(is_int, values))

 根据一个布尔值序列筛选另一个序列:

addresses = [
    '5412 N CLARK',
    '5148 N CLARK',
    '5800 E 58TH'
]

counts = [0, 3, 5]

现在构建一个地址列表,count 值要大于3:

from itertools import compress

more3 = [n>3 for n in counts]
list(compress(addresses, more3))