Python中的字母范围


423

而不是像这样列出字母字符:

alpha = ['a', 'b', 'c', 'd'.........'z']

有什么办法可以将它分组到某个范围之内?例如,对于数字,可以使用进行分组range()

range(1, 10)

似乎一些答案可能需要更新python 3吗?
查理·帕克

2
@CharlieParker不,从一开始我就确保我的回答可以同时在Python 3和Python 2上使用,因为我使用了string.ascii_lowercase(两者都可用)而不是string.lowercase(仅在py2上)
jamylak

重复的stackoverflow.com/questions/14927114/…(本身也似乎是重复的)
HKBst

@hkBst似乎不同之处在于,这些问题要求的是字母的子集范围,而这个问题要求整个字母(这使答案更加具体)
jamylak

Answers:


764
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

如果您确实需要列表:

>>> list(string.ascii_lowercase)
['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']

并做到这一点 range

>>> list(map(chr, range(97, 123))) #or list(map(chr, range(ord('a'), ord('z')+1)))
['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']

其他有用的string模块功能:

>>> help(string) # on Python 3
....
DATA
    ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
    ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    digits = '0123456789'
    hexdigits = '0123456789abcdefABCDEF'
    octdigits = '01234567'
    printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
    punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
    whitespace = ' \t\n\r\x0b\x0c'

2
谢谢。我如何使它反转顺序?
Alexa Elis

63
string.ascii_lowercase[::-1]
jamylak 2013年

map(...)结果上的显式list(...)是多余的,因为map已经返回了一个列表
haavee 2014年

1
@haavee实际上在Python 3 map中不返回不返回list
jamylak 2015年

1
我想知道是否有一种方法可以针对特定的语言环境进行操作,即获取西班牙语,土耳其语等字母
。-贡萨洛

106
[chr(i) for i in range(ord('a'),ord('z')+1)]

1
我得到了:[chr(alpha + 97)为范围(0,27)中的alpha],但这更加直观。不需要记住a的ascii是97
peterb '16

5
@MoeChughtai我不明白,这比string.ascii_lowercase
jylylak 2013年

另外:chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]])。用法:>>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'。对于列表,只需删除"".join( )
Braden Best

@jamylak也许MoeChughtai的意思是,这个答案实际上并没有淹没冗长的解释。
Fornost,

1
@Fornost import string是一个冗长的解释?
jamylak

34

在Python 2.7和3中,您可以使用以下代码:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

正如@Zaz所说: string.lowercase已弃用,不再在Python 3中string.ascii_lowercase工作,但在两者中都工作


2
在Python 3中,使用string.ascii_lowercase。但这会返回一个字符串。如果您需要列表,我想Bg1850是一个很好的解决方案
peterb

正如上面提到的答案, string.ascii_lettersstring.ascii_lowercasestring.ascii_uppercase所有的Python工作3+。
SlimPDX

@peterblist(string.ascii_lowercase)
Braden最佳

11

这是一个简单的字母范围实现:

def letter_range(start, stop="{", step=1):
    """Yield a range of lowercase letters.""" 
    for ord_ in range(ord(start.lower()), ord(stop.lower()), step):
        yield chr(ord_)

演示版

list(letter_range("a", "f"))
# ['a', 'b', 'c', 'd', 'e']

list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']

2
非常好!也适用于非拉丁字符。我刚试过
MarkS

3

如果要查找letters[1:10]与R 相等的值,则可以使用:

 import string
 list(string.ascii_lowercase[0:10])

1

使用内置的range函数在python中打印大写和小写字母

def upperCaseAlphabets():
    print("Upper Case Alphabets")
    for i in range(65, 91):
        print(chr(i), end=" ")
    print()

def lowerCaseAlphabets():
    print("Lower Case Alphabets")
    for i in range(97, 123):
        print(chr(i), end=" ")

upperCaseAlphabets();
lowerCaseAlphabets();

1

这是我能找出的最简单方法:

#!/usr/bin/python3 for i in range(97, 123): print("{:c}".format(i), end='')

因此,从97到122是与'a'和'z'等效的ASCII码。请注意,小写字母和放置123的需要,因为将不包括在内)。

在打印功能中,请确保设置{:c}(字符)格式,在这种情况下,我们希望它一起打印所有内容,甚至不让最后一行换行,这样end=''就可以了。

结果是这样的: abcdefghijklmnopqrstuvwxyz

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.