0
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 也会随着相同的变化同时更新。

4

2 回答 2

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

于 2016-08-04T10:15:20.270 回答
1

查看您陈述的意图而不是“单行”要求:

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 是属性,那么读取它们会产生副作用。优化器如何在动态类型语言中知道这一点?

于 2016-08-04T10:21:38.937 回答