3 votes

Affectation d'une valeur à une liste par un index hors limites

mylist = ["a", "apple", "b", "ball", "c", "cat"]
mylist[6] = "value"
print(mylist)

Erreur :

IndexError: list assignment index out of range

Je me souviens avoir assigné des valeurs par index en javascript, cela ne fonctionne pas en python ?

14voto

birryree Points 29165

Les listes de Python sont indexées à 0. Vous avez 6 éléments dans votre liste, vous pouvez donc les indexer avec n'importe quelle valeur comprise entre 0 et 0. 0 a 5 . Les tentatives de dépassement de ces limites ne fonctionneront pas avec le système normal de l'UE. list mais il semble que vous vouliez utiliser l'indexation comme extension implicite de la liste.

Pour cela, il faut un conteneur clairsemé, et voici une implémentation rapide qui sous-classe la liste.

class SparseList(list):
    def __setitem__(self, index, value):
        """Overrides list's __setitem__ to extend the list
           if the accessed index is out of bounds."""
        sparsity = index - len(self) + 1
        self.extend([None] * sparsity)
        list.__setitem__(self, index, value)

Utilisez ça comme ça :

In [8]: sl = SparseList()

In [9]: print(sl)
[]

In [10]: sl[3] = "hi"

In [11]: print(sl)
[None, None, None, 'hi']

Et votre exemple spécifique :

In [11]: mylist = SparseList(["a", "apple", "b", "ball", "c", "cat"])

In [12]: print mylist
['a', 'apple', 'b', 'ball', 'c', 'cat']

In [13]: mylist[6] = "value"

In [14]: print mylist
['a', 'apple', 'b', 'ball', 'c', 'cat', 'value']

Et si vous voulez quelque chose d'un peu moins artisanal, essayez blist

5voto

Antti Haapala Points 11542

En python, l'assignation simple ne fonctionne pas si l'index n'existe pas. Les tableaux en Javascript sont "clairsemé" vous pouvez stocker une valeur à n'importe quel indice. Au lieu de cela, les listes python ont une taille définie, et l'affectation n'est autorisée que dans les index existants.

Si vous voulez ajouter à la fin, utilisez mylist.append(value) ,

1voto

Arijit Dasgupta Points 51

Ce que vous demandez peut être fait avec SparseList comme décrit par birrye. Ou vous pouvez toujours utiliser append. Dans le dictionnaire python, vous pouvez avoir n'importe quelle affectation indexée, par exemple,

dic = {}
dic['1'] = 100
dic['2'] = 200

Donc ce que tu peux faire, c'est écrire comme ça,

list = {}
i = 1 #Your index
list[str(i)] = value #Your value

Cela pourrait augmenter un peu le temps d'exécution. Vous obtiendrez une exception IndexError si vous faites référence à un index non attribué.

0voto

grc Points 7121

Vous pouvez y parvenir en créant d'abord une liste de None mais ce n'est probablement pas la meilleure façon de faire les choses.

mylist = [None] * 10
mylist[0:5] = ["a", "apple", "b", "ball", "c", "cat"]
mylist[6] = "value"

Vous pouvez également vous contenter d'ajouter des éléments à la fin de la liste.

mylist = ["a", "apple", "b", "ball", "c", "cat"]

# create 7th element
mylist += ["value"]

# create 10th element
mylist += [None] * 2 + ["value2"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X