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
ade 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
padnoneytakerecetas)Uso:
fuente
La respuesta de gnibbler es mejor, pero si necesita un incorporado, podría usar
itertools.izip_longest(zip_longesten 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 losNonevalores 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-itertoolses una biblioteca que incluye unapaddedherramienta especial para este tipo de problemas:Alternativamente,
more_itertoolstambién implementa recetas de herramientas de iteración de Python que incluyenpadnoneytakecomo lo menciona @kennytm, para que no tengan que volver a implementarse:Si desea reemplazar el
Nonerelleno 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 enlesa cantidad antes de completarlo desde el iterador.fuente