Стоят динамические массивы в ДВЕРНОЙ базе данных использования?

Вот быстрая однострочная версия. Как и у Хаскелла, он ленивый.

from itertools import islice, takewhile, repeat
split_every = (lambda n, it:
    takewhile(bool, (list(islice(it, n)) for _ in repeat(None))))

Для этого необходимо использовать iter до вызова split_every.

Пример:

list(split_every(5, iter(xrange(9))))
[[0, 1, 2, 3, 4], [5, 6, 7, 8]]

Хотя это и не одна строка, в приведенной ниже версии не требуется, чтобы вы называли iter, что может быть распространенной ошибкой.

from itertools import islice, takewhile, repeat

def split_every(n, iterable):
    """
    Slice an iterable into chunks of n elements
    :type n: int
    :type iterable: Iterable
    :rtype: Iterator
    """
    iterator = iter(iterable)
    return takewhile(bool, (list(islice(iterator, n)) for _ in repeat(None)))

(Спасибо @ eli-korvigo за улучшения.)

7
задан Joel Coehoorn 8 June 2009 в 00:25
поделиться

1 ответ

Динамические массивы значительно медленнее, чем массивы в стиле C в DOORS, поэтому вам следует избегать их, если вы заранее знаете размер массива.

Если вы знаете количество элементов, но вам нужно больше размеры, вы можете сделать это так:

//Define an array of (for example) bool
int imax=5
int jmax=7
bool myarray[imax*jmax]

//Access for example element myarray[3][2]
int i=3
int j=2
bool mybool=myarray[i*jmax+j]
9
ответ дан 7 December 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: