диапазон по символу в питоне - PullRequest
65 голосов
/ 09 августа 2011

Есть ли способ ранжировать персонажей? как то так.

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

Я надеюсь, что вы, ребята, можете помочь.

Ответы [ 14 ]

0 голосов
/ 20 апреля 2017

Другая опция (работает как диапазон - добавьте 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 голосов
/ 15 апреля 2016

Используя здесь ответ @ 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 голосов
/ 05 февраля 2016

Использование списка понимания:

for c in [chr(x) for x in range(ord('a'), ord('z'))]:
    print c
0 голосов
/ 07 декабря 2015

Используйте «для подсчета в диапазоне» и chr & ord:

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