web-dev-qa-db-fra.com

Insertion de valeurs dans des emplacements spécifiques d'une liste en Python

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. 

35
Dan

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']]
20
David Underhill

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')
77
Justin Peel

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]
4
Janus Troelsen

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]
1
Rizwan Bulbul

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
0
Jonathan Beebe