Ответ 1
Он называется index
. Например,
>>> import string
>>> string.lowercase.index('b')
1
>>>
Примечание: в Python 3, string.lowercase
был переименован в string.ascii_lowercase
.
Я на 90% уверен, что есть встроенная функция, которая делает это.
Мне нужно найти положение символа в алфавите. Таким образом, символ "b" является позицией 1 (считая от 0) и т.д. Кто-нибудь знает, что называется функцией?
Спасибо заранее!
EDIT: то, что я пытаюсь сделать, - отправить все символы X количество "шагов" обратно в альфа-ставку, поэтому, если у меня есть строка с "привет", это будет "gh", если я ее отправлю задний один шаг. Может быть, лучший способ сделать это, какие-нибудь советы?
Он называется index
. Например,
>>> import string
>>> string.lowercase.index('b')
1
>>>
Примечание: в Python 3, string.lowercase
был переименован в string.ascii_lowercase
.
Без импорта
def char_position(letter):
return ord(letter) - 97
def pos_to_char(pos):
return chr(pos + 97)
Вы можете использовать ord() для получения символьной позиции ASCII и chr() для преобразования позиции ASCII в символ.
EDIT: Обновлен для переноса алфавита, так что a-1 отображает на z и z + 1 на
Например:
my_string = "zebra"
difference = -1
new_string = ''.join((chr(97+(ord(letter)-97+difference) % 26) for letter in my_string))
Это создаст строку со всеми символами, перемещенными на один пробел в алфавитном порядке ('ydaqz'). Он будет работать только для строчных слов.
# define an alphabet
alfa = "abcdefghijklmnopqrstuvwxyz"
# define reverse lookup dict
rdict = dict([ (x[1],x[0]) for x in enumerate(alfa) ])
print alfa[1] # should print b
print rdict["b"] # should print 1
rdict - словарь, который создается путем перехода по алфавиту, по одному символу за раз. Функция перечисления возвращает кортеж с индексом списка и символом. Мы отменяем порядок, создавая новый кортеж с помощью этого кода: ( x[1], x[0])
, а затем переверните список кортежей в словарь. Поскольку словарь представляет собой структуру данных хэш-таблицы (ключ, значение), теперь мы можем искать индекс любого символа алфавита.
Однако это не то, что вы хотите решить свою проблему, и если это назначение класса, вы, вероятно, получите 0 для плагиата, если вы его представите. Для кодирования строк сначала создайте ВТОРОЙ алфавит, который организован так, чтобы alfa2 [n] была закодированной формой alfa [n]. В вашем примере второй алфавит будет просто сдвинут на два символа, но вы также можете случайным образом перетасовать символы или использовать какой-либо другой шаблон для их заказа. Все это продолжало бы работать с другими алфавитами, такими как греческий, кириллический и т.д.
Я только начал изучать Python, поэтому я понятия не имею, насколько эффективно это сравнивается с другими методами, но оно работает. Кроме того, не имеет значения, является ли текст верхним регистром, строчным регистром или если есть пунктуация и т.д.
Если вы хотите изменить все буквы:
from string import maketrans
textin = "abcdefghijklmnopqrstuvwxyz"
textout = "cdefghijklmnopqrstuvwxyzab"
texttrans = maketrans(textin, textout)
text = "qcc, gr umpiq"
print text.translate(texttrans)
Также работает для изменения некоторых символов:
from string import maketrans
textin = "81972"
textout = "Seios"
texttrans = maketrans(textin, textout)
text = "811, 9t w7rk2"
print text.translate(texttrans)
Здесь улавливается весь метод, который может быть полезен кому-то...
def alphabet(arg, return_lower=True):
"""
Indexing the english alphabet consisting of 26 letters.
Note: zero indexed
example usage:
alphabet('a')
>> 0
alphabet(25, return_lower=False)
>> 'Z'
:param arg: Either type int or type chr specifying the \
index of desired letter or ther letter at \
the desired index respectivley.
:param return_lower: If index is passes, returns letter \
with corresponding case. Default is \
set to True (lower case returned).
:returns: integer representing index of passed character \
or character at passed index.
"""
arg = str(arg)
assert arg.isdigit() or arg.isalpha()
if arg.isdigit():
if return_lower:
return chr(int(arg) + 97).lower()
return chr(int(arg) + 97).upper()
return ord(arg.lower()) - 97