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



этот вопрос уже есть ответ здесь:



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



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


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



Я знаю, что numpy имеет numpy.zeros но я хочу более универсальное решение

262   10  

10 ответов:

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

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

buckets = [0] * 100

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

import numpy
zarray = numpy.zeros(100)

а затем использовать гистограмма функции библиотеки

самым простым решением будет

"\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)

питон пурист может утверждать, что это не весть а также предлагаем:

my_arr = array('I', (0 for i in range(count)))

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

в зависимости от того, что вы на самом деле собираетесь делать с данными после их сбора, коллекции.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..вы можете объявить их как :

x=[0] * 10

надеюсь, что это помогает..!! ;)

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

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

Comments

    Ничего не найдено.