Python: как я могу увеличить символ?
Я новичок в Python, исходя из Java и C. Как я могу увеличить символ? В Java или C символы и ints практически взаимозаменяемы, и в некоторых циклах мне очень полезно иметь возможность делать символы приращения и индексировать массивы по символам.
Как я могу это сделать в Python? Достаточно плохо, что у меня нет традиционного для (;;) looper - есть ли способ достичь того, чего я хочу достичь, не переосмысливая всю свою стратегию?
любая помощь оцененный.
3 ответов
В Python 2.x, просто используйте ord
и chr
функции:
>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>>
Python 3.x делает это более организованным и интересным из-за его четкого различия между байтами и юникодом. По умолчанию "строка" является unicode, поэтому выше работает (ord
получает символы Unicode и chr
производит их).
но если вас интересуют байты (например, для обработки некоторого двоичного потока данных), все еще проще:
>>> bstr = b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
"достаточно плохо, не имея традиционного для (;;) петлителя"?? Что?
вы пытаетесь сделать
import string
for c in string.lowercase:
...do something with c...
или, возможно, вы используете string.uppercase
или string.letters
?
Python не имеет for(;;)
потому что часто есть лучшие способы сделать это. Он также не имеет математики символов, потому что это тоже не обязательно.
Я пришел из PHP, где вы можете увеличить char (A до B, Z до AA,AA до AB и т. д.) использование оператора++. Я сделал простую функцию, которая делает то же самое в Python. Вы также можете изменить список символов на любой (нижний регистр, верхний регистр и т. д.)- это ваша потребность.
# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
# Unique and sort
chlist = ''.join(sorted(set(str(chlist))))
chlen = len(chlist)
if not chlen:
return ''
text = str(text)
# Replace all chars but chlist
text = re.sub('[^' + chlist + ']', '', text)
if not len(text):
return chlist[0]
# Increment
inc = ''
over = False
for i in range(1, len(text)+1):
lchar = text[-i]
pos = chlist.find(lchar) + 1
if pos < chlen:
inc = chlist[pos] + inc
over = False
break
else:
inc = chlist[0] + inc
over = True
if over:
inc += chlist[0]
result = text[0:-len(inc)] + inc
return result