在python

时间:2016-08-04 10:12:35

标签: python initialization generator-expression

a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]

有没有一种方法可以在一行中初始化x,y,z (因为我不想在每个列表初始化时将a,b和c相乘),单独的0列表。在上面的if中更新了x,那么y和z也会同时更新同样的更新。

2 个答案:

答案 0 :(得分:3)

只需使用其他理解并将其解压缩:

x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)]

请注意,[0 for i in xrange(a*b*c)]等同于更简单的[0] * a*b*c

答案 1 :(得分:0)

看看你的陈述意图而不是“一线”要求:

a = 2
b = 3
c = 4
x = [0 for i in xrange(a*b*c)]
y = x [:]
z = x [:]

不确定优化器是否足够聪明以避免重复乘法:

x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)]

假设a,b和c是属性,因此阅读它们会产生副作用。优化器怎么能用动态类型语言知道呢?