2017-05-16 59 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]) 

但隨機的成功是滿意的感覺沒有了我跑。 相反,失敗的感覺做的:

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 

請幫

+2

側面說明:不要將其命名變量'list';從你分配它的那一刻起,你就已經對名單進行了名字遮蔽了'list'構造函數。對於這個問題,你可以直接循環你的值('for x in a:print(x)');迭代索引和索引顯然是非pythonic,更不用說更慢和更少的自我記錄。 – ShadowRanger

+0

更好的定義'a'通過:'import string' /'a = string.ascii_lowercase' –

回答

2

嘗試括號:

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

+2

這是一個'list',而不是一個「數組」。 – ShadowRanger

1

由於錯誤信息說,set確實不支持索引,而aset,因爲你使用set literals(大括號)來指定它的元素(從Python 3.1開始可用)。然而,從中提取一組元素,你可以簡單地對它們進行迭代:

for i in a: 
    print(i) 
0

試圖修改這樣的代碼。

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] 

設置不支持索引,但列表支持它,所以在這裏我將設置轉換爲列表並獲取列表的索引。

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. 因爲#3,既不wordlist也不message有目的要麼

希望這有助於

PS - 不要忘記選擇一個答案