2014-05-19 68 views
1

我試圖從字母表中創建一組字母,我不確定爲什麼代碼不工作。 Python給我一個錯誤,說「全局名稱a」沒有定義。「有任何想法嗎?先謝謝你。在python中創建一個填充字母表的字符集

s = set() 
    s = {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} 
+2

字符串,如單字母必須在引號... – MattDMo

回答

10

ab,...自己不是字符串,它們的名字。 Python字符串必須用單引號('a'),雙引號("a")或三引號("""a"""'''a''')括起來。所以,你的代碼的正確版本是:

# s = set() - this is useless, the next line is already creating a set 
s = {'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'} 

話雖如此,這樣做的更清潔的方法是使用Python的內置setstring.ascii_lowercase像這樣:

import string 
s = set(string.ascii_lowercase) 
+2

我喜歡這個答案,因爲它至少給的解釋一點點,不只是「在這裏,做這個,再見!」。但是另外一點是,'s = set()'行不起任何作用。我明白了:OP有它,所以這個答案也是如此。但是,當你說「你需要擁有」時,會立即產生無用的陳述,這有點誤導。 –

+0

謝謝,我改變了措辭。好點? – s16h

+0

嗯。也許會好一點。就個人而言,我不會重複OP的無用代碼行。另外,我不認爲關於字符串的新的額外信息是必要的。重要的是要傳達的是名稱和字符串是不同的東西;你在前面做到了。 –

3

試這

import string 
s = set(string.lowercase) 
+3

請注意'string.lowercase'在Python 3中不起作用,最好使用'string.ascii_lowercase'。 –

2

@lenik的回答是最好的,但它的好,記住,每個字符串也是一個迭代序列,並可以傳遞給set()。因此,而不是一個字母的文字列表你可以:

letters = set("abcdefghijklmnopqrstuwxyz") 
+0

謝謝。你會感到驚訝,'string.lowercase'正好返回你提到的字符串,但更容易輸入,並且不需要過度眯眼以試圖找出是否有一些字母丟失=) – lenik

+0

我知道,只是想通過給出另一種方法,可能對OP有用。 –

+0

順便說一句,相信如果一些奇怪的原因,我不能使用'string.ascii_lowercase'我寧願'設置(地圖(字符,範圍(ord('a'),ord('z')+ 1)))'比手動輸入所有這些字母... PS。 'set(map(chr,range(* map(ord,'az'))))'也可以 –

相關問題