J'essaie d'imprimer tous les résultats possibles d'une liste donnée et je me demandais comment attribuer une valeur à divers endroits de la liste. Par exemple, si ma liste était [A,B]
, je souhaite insérer X
dans tous les index possibles de la liste, de manière à renvoyer ceci [X,A,B]
, [A,X,B]
, [A,B,X]
.
Je pensais à utiliser range(len())
et une boucle for mais je ne savais pas comment commencer.
Vous pouvez le faire avec la compréhension de liste suivante:
[mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]
Avec votre exemple:
>>> 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']]
Utilisez insert () pour insérer un élément avant une position donnée.
Par exemple, avec
arr = ['A','B','C']
arr.insert(0,'D')
arr devient ['D', 'A', 'B', 'C'] car 'D' est inséré avant l'élément à l'indice 0.
Maintenant pour
arr = ['A','B','C']
arr.insert(4,'D')
arr devient ['A', 'B', 'C', 'D'] car 'D' est inséré avant l'élément à l'indice 4 (qui est 1 au-delà de la fin du tableau).
Cependant, si vous souhaitez générer toutes les permutations d'un tableau, il existe des moyens de le faire déjà intégré à Python. Le paquet itertools a un générateur de permutation.
Voici un exemple de code:
import itertools
arr = ['A','B','C']
perms = itertools.permutations(arr)
for perm in perms:
print perm
va imprimer
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
Si vous souhaitez insérer une liste dans une liste, vous pouvez procéder comme suit:
>>> 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 plus simple est la liste d'utilisation [i: i]
a = [1,2, 3, 4]
a[2:2] = [10]
Imprimer un pour vérifier l'insertion
print a
[1, 2, 10, 3, 4]
Venant de JavaScript, c'était quelque chose que j'avais l'habitude d'avoir "intégré" via Array.prototype.splice () , alors j'ai créé une fonction Python qui fait la même chose:
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