web-dev-qa-db-fra.com

TypeError: l'objet 'set' ne prend pas en charge l'indexation

Je viens juste de faire des trucs aléatoires dans Python 3.5 . Et avec 15 minutes de temps libre, j’ai trouvé ceci:

a = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
 "x", "y", "z"}
len_a = len(a)
list = list(range(0, len_a))
message = ""
wordlist = [ch for ch in message]
len_wl = len(wordlist)
for x in list:
    print (a[x])

Mais cette sensation satisfaisante de succès au hasard ne m'a pas envahie… Au lieu de cela, le sentiment d'échec a:

Traceback (most recent call last):
File "/Users/spathen/PycharmProjects/soapy/soup.py", line 9, in  <module>
print (a[x])
TypeError: 'set' object does not support indexing

S'il vous plaît aider

6
Sakib Pathen

Essayez les crochets:

a = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
 "x", "y", "z"]

c'est-à-dire: utilisez une list au lieu d'une set

4
lostbard

Comme le message d'erreur le dit, set ne prend effectivement pas en charge l'indexation et a est une set, car vous avez utilisé des littéraux de set (accolades) pour spécifier ses éléments (disponibles depuis Python 3.1). Cependant, pour extraire des éléments d'un ensemble, vous pouvez simplement les parcourir:

for i in a:
    print(i)
4
Andrzej Pronobis

essayez de modifier votre code comme ceci.

a = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", 
      "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
      "x", "y", "z"}
list_a = list(a)
len_a = len(a)
list = list(range(0, len_a))
message = ""
wordlist = [ch for ch in message]
len_wl = len(wordlist)
for x in list:
   print list_a[x]

set ne supporte pas l'indexation, mais la liste le supporte, donc ici je convertis set en list et récupère l'index de la liste.

0
somil

@Sakib, votre ensemble a est déjà itérable. Veuillez envisager d'utiliser ce code mis à jour au lieu d'accéder aux éléments par index.

a = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
for x in a:
  print ( x )

De plus, votre code ne montre pas assez d'intention pour que nous puissions vous aider à atteindre votre objectif ultime . Exemples:

  1. range() renvoie également un type itérable, il n'y a donc aucune raison de le convertir en list
  2. Il est déconseillé de réutiliser (écraser) le mot clé list. Cela entraînerait beaucoup plus de problèmes.
  3. len_wl ne sert pas encore
  4. En raison de # 3, ni wordlist ni message n'ont de but soit

J'espère que cela t'aides

PS - n'oubliez pas de choisir une réponse

0
Chris