web-dev-qa-db-ja.com

pythonの文字の範囲

文字を超えて範囲を変更する方法はありますか?このようなもの。

for c in xrange( 'a', 'z' ):
    print c

皆さんが助けてくれることを願っています。

67
huan

これは、カスタムジェネレーターの優れた用途です。

Python 2:

def char_range(c1, c2):
    """Generates the characters from `c1` to `c2`, inclusive."""
    for c in xrange(ord(c1), ord(c2)+1):
        yield chr(c)

その後:

for c in char_range('a', 'z'):
    print c

Python 3:

def char_range(c1, c2):
    """Generates the characters from `c1` to `c2`, inclusive."""
    for c in range(ord(c1), ord(c2)+1):
        yield chr(c)

その後:

for c in char_range('a', 'z'):
    print(c)
86
Ned Batchelder
import string
for char in string.ascii_lowercase:
    print char

大文字、数字、ロケール依存の文字など、他の可能性については string constants を参照してください。複数のセットのすべての文字が必要な場合は、string.ascii_uppercase + string.ascii_lowercaseのように結合できます。

75
agf

文字を数字に変換して、元に戻す必要があります。

for c in xrange(ord('a'), ord('z')+1):
    print chr(c) # resp. print unicode(c)

美しさと読みやすさのために、これをジェネレーターでラップできます。

def character_range(a, b, inclusive=False):
    back = chr
    if isinstance(a,unicode) or isinstance(b,unicode):
        back = unicode
    for c in xrange(ord(a), ord(b) + int(bool(inclusive)))
        yield back(c)

for c in character_range('a', 'z', inclusive=True):
    print(chr(c))

このジェネレーターは、inclusive=False(デフォルト)で呼び出してPythonの通常の動作を模倣して終了要素を除外するか、inclusive=True(デフォルト)で呼び出して含めることができます。したがって、デフォルトのinclusive=Falseでは、'a', 'z'aを除くyからzの範囲になります。

abのいずれかがユニコードの場合、ユニコードで結果を返します。それ以外の場合は、chrを使用します。

現在(おそらく)Py2でのみ動作します。

24
glglgl

ここには他にも良い答えがあります(個人的にはstring.lowercaseを使用すると思います)が、完全を期すために map()chr() onを使用できます小文字のASCII値:

for c in map(chr, xrange(97, 123)):
   print c
11
GreenMatt

文字の短い固定リストがある場合は、Pythonの文字列のリストとしての処理を使用します。

for x in 'abcd':
    print x

または

[x for x in 'abcd']
7
Dannid
for character in map(   chr, xrange( ord('a'), ord('c')+1 )   ):
   print character

プリント:

a
b
c
5
securecurve
# generating 'a to z' small_chars.
small_chars = [chr(item) for item in range(ord('a'), ord('z')+1)]
# generating 'A to Z' upper chars.
upper_chars = [chr(item).upper() for item in range(ord('a'), ord('z')+1)]
5
user1630938

上記のトップ記事からインスピレーションを得て、私はこれを思いつきました:

map(chr,range(ord('a'),ord('z')+1))                     
3
sjs7007

同じニーズがあり、これを使用しました:

chars = string.ascii_lowercase
range = list(chars)[chars.find('a'):chars.find('k')+1]

これが誰かを助けることを願っています

0
ayoub aboussaad

ここで@ ned-batchelderの答えを使用して、python3

def char_range(c1, c2):
    """Generates the characters from `c1` to `c2`, inclusive."""
    """Using range instead of xrange as xrange is deprecated in Python3""" 
    for c in range(ord(c1), ord(c2)+1):
        yield chr(c)

それから、ネッドの答えと同じこと:

for c in char_range('a', 'z'):
    print c

ありがとう、ネッド!

0
Andy K

別のオプション(範囲のように動作します-停止を含めたい場合は停止するために1を追加します)

>>> import string
>>> def crange(arg, *args):
...     """character range, crange(stop) or crange(start, stop[, step])"""
...     if len(args):
...         start = string.ascii_letters.index(arg)
...         stop = string.ascii_letters.index(args[0])
...     else:
...         start = string.ascii_letters.index('a')
...         stop = string.ascii_letters.index(arg)
...     step = 1 if len(args) < 2 else args[1]
...     for index in range(start, stop, step):
...         yield string.ascii_letters[index]
...
>>> [_ for _ in crange('d')]
['a', 'b', 'c']
>>>
>>> [_ for _ in crange('d', 'g')]
['d', 'e', 'f']
>>>
>>> [_ for _ in crange('d', 'v', 3)]
['d', 'g', 'j', 'm', 'p', 's']
>>>
>>> [_ for _ in crange('A', 'G')]
['A', 'B', 'C', 'D', 'E', 'F']
0
Wyrmwood

リスト内包表記を使用する:

for c in [chr(x) for x in range(ord('a'), ord('z'))]:
    print c
0
Bugalugs Nash

「範囲内のカウントに」およびchr&ordを使用します。

print [chr(ord('a')+i) for i in range(ord('z')-ord('a'))]
0
erjemin