Как объявить массив нулей в Python (или массив определенного размера) [дубликат]
этот вопрос уже есть ответ здесь:
Я пытаюсь построить гистограмму графов... поэтому я создаю ведра.
Я знаю, что могу просто пройти и добавить кучу нулей, то есть что-то вроде этих строк:
buckets = []
for i in xrange(0,100):
buckets.append(0)
есть более элегантный способ сделать это? Я чувствую, что должен быть способ просто объявить массив определенного размера.
Я знаю, что numpy имеет numpy.zeros но я хочу более универсальное решение
10 ответов:
просто для полноты: чтобы объявить многомерный список нулей в 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
использовать 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
надеюсь, что это помогает..!! ;)
Comments