Как объявить массив нулей в python (или массив определенного размера)

Я пытаюсь построить гистограмму счетчиков... поэтому я создаю ведра. Я знаю, что могу просто пройти и добавить кучу нулей, и что-то в этом роде:

buckets = []
for i in xrange(0,100):
    buckets.append(0)

Есть ли более элегантный способ сделать это? Я чувствую, что должен быть способ просто объявить массив определенного размера.

Я знаю, что numpy имеет numpy.zeros, но мне нужно более общее решение

Ответ 1

buckets = [0] * 100

Ответ 2

Просто для полноты. Чтобы объявить многомерный список нулей в python, вы должны использовать понимание списка следующим образом:

buckets = [[0 for col in range(5)] for row in range(10)]

чтобы избежать обмена ссылками между строками.

Это выглядит более неуклюже, чем код chester1000, но существенно, если значения, как предполагается, будут изменены позже. Подробнее см. Python FAQ.

Ответ 3

Используйте это:

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

Ответ 4

Вы можете умножить list на целое число n, чтобы повторить list n раз:

buckets = [0] * 100

Ответ 5

использовать numpy

import numpy
zarray = numpy.zeros(100)

И затем воспользуйтесь функцией Histogram

Ответ 6

Простейшим решением было бы

"\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 для буферов.

Ответ 7

В вопросе говорится: " Как объявить массив нулей...", но затем пример кода ссылается на список 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)))

Питоническая версия очень медленная, и когда у вас есть несколько сотен массивов, которые будут инициализированы тысячами значений, разница заметно.

Ответ 8

В зависимости от того, что вы собираетесь делать с данными после его сбора, может быть полезно collection.defaultdict(int).

Ответ 9

Хорошо, я хотел бы помочь вам, разместив образец программы и ее выход

Программа: -

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

Надеюсь, это поможет..!!;)

Ответ 10

Если вам нужно больше столбцов:

buckets = [[0., 0., 0., 0., 0.] for x in range(0)]