Подтвердить что ты не робот

Как создать целочисленный массив в Python?

Это не должно быть так сложно. Я имею в виду в C,

int a[10]; 

- это все, что вам нужно. Как создать массив всех нулей для случайного размера. Я знаю функцию zeros() в NumPy, но должен быть простой способ встроенного, а не другого модуля.

4b9b3361

Ответ 1

Если вас не устраивают списки (потому что они могут содержать что угодно и занимать слишком много памяти), вы можете использовать эффективный массив целых чисел:

import array
array.array('i')

Смотрите здесь

Если вам нужно его инициализировать,

a = array.array('i',(0 for i in range(0,10)))

Ответ 2

двумя способами:

x = [0] * 10
x = [0 for i in xrange(10)]

Изменить: заменить range на xrange, чтобы избежать создания другого списка.

Также: как и многие другие, включая Pi и Ben James, это создает list, а не массив Python. Хотя список во многих случаях достаточно и достаточно прост, для критически важных применений (например, при дублировании в тысячах объектов) вы можете просматривать массивы python. Посмотрите модуль array, как описано в других ответах в этом потоке.

Ответ 3

>>> a = [0] * 10
>>> a
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Ответ 4

Используйте модуль массива. С его помощью вы можете эффективно хранить коллекции того же типа.

>>> import array
>>> import itertools
>>> a = array_of_signed_ints = array.array("i", itertools.repeat(0, 10))

Для получения дополнительной информации - например, различные типы, посмотрите документацию о модуле массива. Для до 1 миллиона записей это должно быть довольно быстро. За 10 миллионов записей моя локальная машина думает в течение 1,5 секунд.

Второй параметр array.array - это генератор, который строит определенную последовательность по мере ее чтения. Таким образом, модуль массива может потреблять нули один за другим, но генератор использует только постоянную память. Этот генератор не становится больше (по памяти), если последовательность становится длиннее. Массив будет расти, конечно, но это должно быть очевидно.

Вы используете его точно так же, как список:

>>> a.append(1)
>>> a.extend([1, 2, 3])
>>> a[-4:]
array('i', [1, 1, 2, 3])
>>> len(a)
14

... или просто преобразуйте его в список:

>>> l = list(a)
>>> len(l)
14

Удивительно

>>> a = [0] * 10000000

быстрее при построении, чем метод массива. Иди цифра!:)

Ответ 5

a = 10 * [0]

дает массив длиной 10, заполненный нулями.

Ответ 6

import random

def random_zeroes(max_size):
  "Create a list of zeros for a random size (up to max_size)."
  a = []
  for i in xrange(random.randrange(max_size)):
    a += [0]

Используйте range вместо этого, если вы используете Python 3.x.

Ответ 7

Если вам нужно быстро инициализировать массив, вы можете сделать это с помощью блоков вместо инициализатора генератора, и это будет намного быстрее. Создание списка с помощью [0]*count выполняется так же быстро.

import array

def zerofill(arr, count):
    count *= arr.itemsize
    blocksize = 1024
    blocks, rest = divmod(count, blocksize)
    for _ in xrange(blocks):
        arr.fromstring("\x00"*blocksize)
    arr.fromstring("\x00"*rest)

def test_zerofill(count):
    iarr = array.array('i')
    zerofill(iarr, count)
    assert len(iarr) == count

def test_generator(count):
    iarr = array.array('i', (0 for _ in xrange(count)))
    assert len(iarr) == count

def test_list(count):
    L = [0]*count
    assert len(L) == count

if __name__ == '__main__':
    import timeit
    c = 100000
    n = 10
    print timeit.Timer("test(c)", "from __main__ import c, test_zerofill as test").repeat(number=n)
    print timeit.Timer("test(c)", "from __main__ import c, test_generator as test").repeat(number=n)
    print timeit.Timer("test(c)", "from __main__ import c, test_list as test").repeat(number=n)

Результаты:

(array in blocks) [0.022809982299804688, 0.014942169189453125, 0.014089107513427734]
(array with generator) [1.1884641647338867, 1.1728270053863525, 1.1622772216796875]
(list) [0.023866891860961914, 0.035660028457641602, 0.023386955261230469]

Ответ 8

import numpy as np

new_array=np.linspace(0,10,11).astype('int')

Альтернатива для приведения типа при создании массива.