Tengo una lista de tamaño < N y quiero rellenarla hasta el tamaño N con un valor.
Ciertamente, puedo usar algo como lo siguiente, pero creo que debería haber algo que me perdí:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
python
list
list-manipulation
newtover
fuente
fuente
Respuestas:
o si no quieres cambiarte
a
de lugarsiempre puedes crear una subclase de lista y llamar al método como quieras
fuente
Creo que este enfoque es más visual y pitónico.
fuente
N < len(a)
. Es el caso de la segunda respuesta que proporcionó.No hay una función incorporada para esto. Pero podría componer los elementos integrados para su tarea (o cualquier cosa: p).
(Modificado de itertool's
padnone
ytake
recetas)Uso:
fuente
La respuesta de gnibbler es mejor, pero si necesita un incorporado, podría usar
itertools.izip_longest
(zip_longest
en Py3k):que devolverá una lista de tuplas
( i, list[ i ] )
completadas en Ninguno. Si necesita deshacerse del mostrador, haga algo como:fuente
operator.itemgetter()
. También losNone
valores debían ser reemplazados por""
.También puede usar un generador simple sin ningún tipo de construcción. Pero no rellenaría la lista, sino que dejaría que la lógica de la aplicación se ocupara de una lista vacía.
De todos modos, iterador sin buildins
fuente
Si desea rellenar con None en lugar de '', map () hace el trabajo:
fuente
more-itertools
es una biblioteca que incluye unapadded
herramienta especial para este tipo de problemas:Alternativamente,
more_itertools
también implementa recetas de herramientas de iteración de Python que incluyenpadnone
ytake
como lo menciona @kennytm, para que no tengan que volver a implementarse:Si desea reemplazar el
None
relleno predeterminado , use una lista de comprensión:fuente
Para salir de kennytm:
fuente
puede usar un
*
operador de desempaquetado iterable :salida:
fuente
Esto evita cualquier asignación adicional, a diferencia de cualquier solución que dependa de crear y agregar la lista
[value] * extra_length
. El método "extender" primero llama__length_hint__
al iterador y extiende la asignación enl
esa cantidad antes de completarlo desde el iterador.fuente