2014-05-19 31 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'))))'也可以 –

相关问题