Инициализировать несколько списков в Python

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 также обновляются одновременно с теми же изменениями.

2 ответа

Решение

Просто используйте другое понимание и распакуйте его:

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 являются свойствами, поэтому чтение их будет иметь побочные эффекты. Как оптимизатор мог узнать это на языке с динамической типизацией?

Другие вопросы по тегам