2017-05-16 11 views
2

私はちょうどPython 3.5でいくつかランダムなことをしてきました。 そして、空いた時間の15分で、私はこの思い付いた:TypeError: 'set'オブジェクトはインデックス作成をサポートしていません

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

しかし、ランダムな成功の満足感は私の上に実行しませんでした。 は代わりに、失敗の感じがしました:

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

すなわち:エラーメッセージとして代わりにset

+2

サイドノートを選択することを忘れないでください:変数 'list'に名前を付けないでください。それを割り当てた瞬間から 'list'コンストラクタに名前を付けました。その点については、値を直接ループすることもできます( 'for a in:print(x)')。索引の繰り返しと索引付けは、明らかに非平凡であり、遅くて自己文書化も少ないことは言うまでもありません。 – ShadowRanger

+0

'a'は' import string'/'a = string.ascii_lowercase'を使って定義する方が良いです。 –

答えて

2

は角括弧を試してみてください助けてくださいsetは実際にインデックス作成をサポートしておらず、aはですPython 3.1以降で利用可能な要素を指定するためにリテラル(中括弧)を使用していたためです。しかし、セットから要素を抽出するために、あなたは、単にそれらを反復処理することができます。

for i in a: 
    print(i) 
+2

これは' '配列 'ではなく' 'リストです。 – ShadowRanger

1

listを使用

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 

0

は、このようなあなたのコードを変更してみてください。

セットはインデックス作成をサポートしていませんが、ここではリストをインデックスに変換してリストのインデックスを取得します。

0

@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. は目的を果たしていない、まだ
  5. の#3、どちらwordlistmessageが目的のいずれか
を持っているので、

これは

PS役に立てば幸い - 答えに

関連する問題