a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]
有没有一种方法可以在一行中将 x,y,z 初始化(因为我不想为每个列表初始化将 a、b 和 c 相乘),作为单独的 0 列表。在上面如果 x 被更新,那么 y 和 z 也会随着相同的变化同时更新。
a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]
有没有一种方法可以在一行中将 x,y,z 初始化(因为我不想为每个列表初始化将 a、b 和 c 相乘),作为单独的 0 列表。在上面如果 x 被更新,那么 y 和 z 也会随着相同的变化同时更新。
只需使用另一个理解并解压缩它:
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
。
查看您陈述的意图而不是“单行”要求:
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 是属性,那么读取它们会产生副作用。优化器如何在动态类型语言中知道这一点?