Ответ 1
buckets = [0] * 100
Я пытаюсь построить гистограмму счетчиков... поэтому я создаю ведра. Я знаю, что могу просто пройти и добавить кучу нулей, и что-то в этом роде:
buckets = []
for i in xrange(0,100):
buckets.append(0)
Есть ли более элегантный способ сделать это? Я чувствую, что должен быть способ просто объявить массив определенного размера.
Я знаю, что numpy имеет numpy.zeros
, но мне нужно более общее решение
buckets = [0] * 100
Просто для полноты. Чтобы объявить многомерный список нулей в python, вы должны использовать понимание списка следующим образом:
buckets = [[0 for col in range(5)] for row in range(10)]
чтобы избежать обмена ссылками между строками.
Это выглядит более неуклюже, чем код chester1000, но существенно, если значения, как предполагается, будут изменены позже. Подробнее см. Python FAQ.
Используйте это:
bucket = [None] * 100
for i in range(100):
bucket[i] = [None] * 100
ИЛИ
w, h = 100, 100
bucket = [[None] * w for i in range(h)]
Оба из них выведут правильный пустой многомерный список ведра 100x100
Вы можете умножить list
на целое число n
, чтобы повторить list
n
раз:
buckets = [0] * 100
использовать numpy
import numpy
zarray = numpy.zeros(100)
И затем воспользуйтесь функцией Histogram
Простейшим решением было бы
"\x00" * size # for a buffer of binary zeros
[0] * size # for a list of integer zeros
В общем, вы должны использовать больше pythonic-кода, например, для понимания списка (в вашем примере: [0 for unused in xrange(100)]
) или с помощью string.join
для буферов.
В вопросе говорится: " Как объявить массив нулей...", но затем пример кода ссылается на список Python:
buckets = [] # this is a list
Однако, если кто-то действительно хочет инициализировать массив, я предлагаю:
from array import array
my_arr = array('I', [0] * count)
Пурист Python может утверждать, что это не пифонический и предлагать:
my_arr = array('I', (0 for i in range(count)))
Питоническая версия очень медленная, и когда у вас есть несколько сотен массивов, которые будут инициализированы тысячами значений, разница заметно.
В зависимости от того, что вы собираетесь делать с данными после его сбора, может быть полезно collection.defaultdict(int).
Хорошо, я хотел бы помочь вам, разместив образец программы и ее выход
Программа: -
t=input("")
x=[None]*t
y=[[None]*t]*t
for i in range(1,t+1):
x[i-1]=i;
for j in range(1,t+1):
y[i-1][j-1]=j;
print x
print y
Выход: -
2
[1, 2]
[[1, 2], [1, 2]]
Надеюсь, что это прояснит некоторые основные понятия, касающиеся вашей декларации. Чтобы инициализировать их некоторыми другими конкретными значениями, например, инициализировать их 0., Вы можете объявить их как:
х = [0] * 10
Надеюсь, это поможет..!!;)
Если вам нужно больше столбцов:
buckets = [[0., 0., 0., 0., 0.] for x in range(0)]