web-dev-qa-db-ja.com

TypeError: 'set'オブジェクトはインデックス作成をサポートしていません

私はちょうどPython 3.5。でランダムなことをしていました。そして15分の空き時間で、私はこれを思いつきました:

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])

しかし、ランダムに成功したという満足感は、私には及ばなかった。その代り、失敗の感覚はした:

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

助けてください

8
Sakib Pathen

角かっこを試してください:

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の代わりにsetを使用します

5
lostbard

エラーメッセージが示すように、setは実際にインデックス作成をサポートしていません。また、asetです。 Python 3.1)。ただし、セットから要素を抽出するには、単純に要素を反復処理できます。

for i in a:
    print(i)
4

@Sakib、あなたのセットaはすでに反復可能です。インデックスで要素にアクセスする代わりに、この更新されたコードの使用を検討してください。

_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 )
_

さらに、あなたのコードは、私たちがあなたの最終的な目標を達成するのに役立つほど十分な意図を示していません。例:

  1. range()も反復可能な型を返すため、listに変換する理由はありません
  2. listキーワードを再利用(上書き)することは悪い習慣であり、そうするとさらに多くの問題が発生します。
  3. _len_wl_はまだ目的を果たしていません
  4. #3のため、wordlistmessageも目的がありません

お役に立てれば

PS-回答を選択することを忘れないでください

1
Chris

このようにコードを変更してみてください。

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はインデックスをサポートしていませんが、リストはサポートしていますので、ここではsetをリストに変換し、リストのインデックスを取得します。

0
somil