Insertar valores en ubicaciones específicas en una lista en Python

Estoy tratando de imprimir todos los resultados posibles de una lista determinada y me preguntaba cómo colocar un valor en varios lugares de la lista. Por ejemplo, si mi lista era [A,B] , quiero insertar X en todos los índices posibles de la lista para que devuelva este [X,A,B] , [A,X,B] , [A,B,X] .

Estaba pensando en usar range(len()) y un bucle for, pero no estoy seguro de cómo empezar.

Related of "Insertar valores en ubicaciones específicas en una lista en Python"

Puedes hacer esto con la siguiente lista de comprensión:

 [mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)] 

Con tu ejemplo:

 >>> mylist=['A','B'] >>> newelement='X' >>> [mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)] [['X', 'A', 'B'], ['B', 'X', 'A'], ['A', 'B', 'X']] 

Use Insertar () para insertar un elemento antes de una posición dada.

Por ejemplo, con

 arr = ['A','B','C'] arr.insert(0,'D') 

arr se convierte en [‘D’, ‘A’, ‘B’, ‘C’] porque ‘D’ se inserta antes del elemento en el índice 0.

Ahora para

 arr = ['A','B','C'] arr.insert(4,'D') 

arr se convierte en [‘A’, ‘B’, ‘C’, ‘D’] porque ‘D’ se inserta antes del elemento en el índice 4 (que es 1 más allá del final de la matriz).

Sin embargo, si está buscando generar todas las permutaciones de una matriz, hay formas de hacerlo ya incorporadas en Python. El paquete itertools tiene un generador de permutación.

Aquí hay un código de ejemplo:

 import itertools arr = ['A','B','C'] perms = itertools.permutations(arr) for perm in perms: print perm 

se imprimirá

 ('A', 'B', 'C') ('A', 'C', 'B') ('B', 'A', 'C') ('B', 'C', 'A') ('C', 'A', 'B') ('C', 'B', 'A') 

Si desea insertar una lista en una lista, puede hacer esto:

 >>> a = [1,2,3,4,5] >>> for x in reversed(['a','b','c']): a.insert(2,x) >>> a [1, 2, 'a', 'b', 'c', 3, 4, 5] 

La lista de uso más sencilla es [i: i]

  a = [1,2, 3, 4] a[2:2] = [10] 

Imprimir una para comprobar la inserción

  print a [1, 2, 10, 3, 4] 

Desde JavaScript, esto era algo que estaba acostumbrado a tener “incorporado” a través de Array.prototype.splice () , así que hice una función de Python que hace lo mismo:

 def list_splice(target, start, delete_count=None, *items): """Remove existing elements and/or add new elements to a list. target the target list (will be changed) start index of starting position delete_count number of items to remove (default: len(target) - start) *items items to insert at start index Returns a new list of removed items (or an empty list) """ if delete_count == None: delete_count = len(target) - start # store removed range in a separate list and replace with *items total = start + delete_count removed = target[start:total] target[start:total] = items return removed 

Si l es tu lista y X es tu valor:

 for i in range(len(l) + 1): print l[:i] + [X] + l[i:] 

Intente este fragmento de código:

 for x in range(3): l=['A', 'B'] l.insert(x, 'X') print(l) 

Salida:

 ['X', 'A', 'B'] ['A', 'X', 'B'] ['A', 'B', 'X']