Eu tenho uma lista de tamanho < N e quero preenchê-la até o tamanho N com um valor.
Certamente, posso usar algo como o seguinte, mas sinto que deve haver algo que perdi:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
python
list
list-manipulation
newtover
fonte
fonte
Respostas:
ou se você não quiser mudar
a
de lugarvocê sempre pode criar uma subclasse de lista e chamar o método como quiser
fonte
Eu acho que essa abordagem é mais visual e pitônica.
fonte
N < len(a)
. É o caso da segunda resposta que você forneceu.Não há função embutida para isso. Mas você pode compor os recursos internos para sua tarefa (ou qualquer coisa: p).
(Modificado de itertool
padnone
etake
receitas)Uso:
fonte
A resposta do gnibbler é mais agradável, mas se você precisar de um integrado, pode usar
itertools.izip_longest
(zip_longest
no Py3k):que retornará uma lista de tuplas
( i, list[ i ] )
preenchidas como Nenhum. Se você precisar se livrar do contador, faça algo como:fonte
operator.itemgetter()
. Além disso, osNone
valores precisavam ser substituídos""
.Você também pode usar um gerador simples sem nenhum build ins. Mas eu não preencheria a lista, mas deixaria a lógica do aplicativo lidar com uma lista vazia.
De qualquer forma, iterador sem buildins
fonte
Se você deseja preencher com Nenhum em vez de '', map () faz o trabalho:
fonte
more-itertools
é uma biblioteca que inclui umapadded
ferramenta especial para este tipo de problema:Como alternativa,
more_itertools
também implementa receitas de itertools Python, incluindopadnone
etake
conforme mencionado por @kennytm, para que não precisem ser reimplementadas:Se você deseja substituir o
None
preenchimento padrão , use uma compreensão de lista:fonte
Para sair do kennytm:
fonte
você pode usar o
*
operador de desempacotamento iterável :resultado:
fonte
Isso evita qualquer alocação extra, ao contrário de qualquer solução que dependa da criação e do acréscimo da lista
[value] * extra_length
. O método "extend" primeiro chama__length_hint__
o iterador e estende a alocaçãol
por muito antes de preenchê-la a partir do iterador.fonte