J'essaie d'assigner les valeurs d'une chaîne à différents index de tableau
mais j'obtiens une erreur appelée "affectation de liste hors de portée"
uuidVal = ""
distVal = ""
uuidArray = []
distArray = []
for i in range(len(returnedList)):
for beacon in returnedList:
uuidVal= uuidVal+beacon[:+2]
uuidArray[i]= uuidVal
distVal= distVal+beacon[-2:]
distArray[i]= distVal
uuidVal=""
disVal=""
J'ai essayé d'utiliser
distArray[i].append(distVal)
au lieu de
distArray[i]= distVal
mais il a donné une erreur appelée "index de liste hors de portée"
En utilisant
distArray.append(distVal)
fait fonctionner sans erreur mais le résultat était mauvais
car il continue à concaténer la nouvelle valeur attribuée avec les anciennes valeurs de l'index suivant
Comment cela devrait-il fonctionner:
returnList [ '52: 33: 42: 40: 94: 10: 19, -60 ', '22: 34: 42: 24: 89: 70: 89, -90' , '87: 77: 98: 54: 81: 23: 71, -81 ']
à chaque itération, il attribue le premier caractère à uuidVal (ex: 52, 22, 87) et les deux derniers caractères à distVal (ex: 60, 90, 81)
à la fin uuidArray devrait avoir ces valeurs [52, 22, 87]
et distArray devrait avoir ces valeurs [60, 90, 81]
Remarque: utilisez .append concaténer les valeurs, par exemple si utilisé avec distArray like distArray.append (distVal) les valeurs seront comme ceci [60, 6090 , 609081]
oui, vous obtiendrez un index de liste d'erreurs hors limites pour:
distArray[i] = distVal
vous accédez à l'index qui n'est pas encore créé
permet de voir cette démo:
>>> a=[] # my list is empty
>>> a[2] # i am trying to access the value at index 2, its actually not present
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
votre code devrait être comme ça:
uuidArray = []
distArray = []
distVal = ""
for beacon in returnedList:
uuidArray.append(beacon[:2])
distval += beacon[-2:]
distArray.append(distVal)
la sortie sera uudiArray: ['52', '22', '87'] et distArray: ['60', '6090', '609081']
Lorsque vous définissez distArray comme suit: distArray = []
Vous initialisez une liste avec 0 élément. distArray[2]
renvoie correctement une erreur, car vous tentez d'accéder à un élément au-delà de la longueur totale du tableau.
Il y a deux façons de gérer cela:
append
. Ceci prend la liste et l'étend de l'élément contenu dans l'appel de fonction. Ceci doit être préféré pour tous sauf les occasions les plus rares, imo. distArray = [0]*num_elements
, où num_elements
est le nombre d'éléments que vous souhaitez avoir. Cela créera une liste de taille num_elements
, toutes égales à 0. def array():
a = []
size = int(input("Enter the size of array: "))
for i in range(size):
b = int(input("enter array element: "))
a.append(b)
return a
D'autres ont déjà expliqué l'erreur, je vais donc laisser mon 2c sur la façon de résoudre ce problème. Tout d’abord, vous pouvez utiliser du pur Python:
distArray = [None for _ in xrange(max_value+1)]
J'utilise des objets de type None pour allouer le tableau (alors que beaucoup de gens préfèrent les zéros) car ils ne peuvent pas être interprétés comme un entier ou un bool.
Si votre processus nécessite beaucoup de RAM, vous devriez mieux utiliser les tableaux numpy. Et il existe un moyen très efficace de créer un tableau vide numpy.
import numpy as np
distArray = np.empty(max_value+1, dtype=str)
Notez que vous devez sélectionner manuellement un type de données.
Ce que vous essayez de réaliser est fondamentalement un hash-map/table simplifié. Si vous n'êtes pas sûr de la valeur maximale, vous pouvez envisager d'écrire votre propre tableau 'dynamique', dont la taille augmentera, si elle est appelée en dehors de ses frontières, au lieu de générer une erreur.
class DistArray():
def __init__(self, starting_size):
self.arr = [None for _ in xrange(starting_size)]
def __getitem__(self, i):
return self.arr[i]
def __iter__(self):
return iter(self.arr)
def insert_item(self, item, value):
try:
self.arr[value] = item
except:
self.arr.extend([None for _ in xrange(value - len(self.arr))])
self.arr[value] = item
Cette chose va s'adapter à vos besoins.
distArray = DistArray(starting_size)
distArray.insert_item(string, value)