列出推导式和生成器表达式

列出推导式和生成器表达式

列表推导式和生成器表达式是重要的Python特性,它们允许您以简洁的方式执行隐式枚举。举个简单的例子,下面的列表推导式构建了一个包含从1到5的数的平方的列表:

Gurobi > [x*x for x in [1,2,3,4,5]] [1,4,9,16,25]
生成器表达式非常类似,但它用于生成可迭代的(可以迭代的东西)。例如,假设我们要计算从1到5的数的平方和。我们可以使用列表综合来构建列表,然后将该列表传递给总和.然而,使用生成器表达式更简单、更有效:
Gurobi > sum(x*x for x in [1, 2, 3, 4, 5]
生成器表达式可在方法接受可迭代的参数(可以迭代的东西)。例如,大多数Python方法接受列表参数(最常见的类型可迭代的)也接受一个生成器表达式。

注意,有一个Python例程用于创建一个连续的整数列表:范围.上面的内容通常是这样写的:

Gurobi > sum(x*x for x in range(1,6))
细节上的范围可以找到函数在这里

列表推导式和生成器表达式都可以包含一个以上的表达式子句,以及一个或多个如果条款。下面的例子构建了一个包含所有元组的列表x, y对的地方xy都小于4和x小于y

gurobi > [x (x, y)范围(4)y的范围(4)如果x < y][(0, 1),(0, 2),(0, 3),(1、2),(1,3),(2,3)]
请注意,语句是从左到右执行的,一个语句的值可以在下一个语句中使用,所以写上述语句的更有效的方法是:
Gurobi > [(x,y) for x in range(4) for y in range(x+ 1,4)]

生成器表达式在我们的Python示例中被广泛使用,主要是在addConstrs方法。