Получить позицию символа в алфавите

Я на 90% уверен, что есть встроенная функция, которая делает это.

Мне нужно найти позицию символа в алфавите. Таким образом, символ " b " - это позиция 1 (отсчет от 0) и т. д. Кто-нибудь знает, как называется эта функция?

спасибо заранее!

EDIT: то, что я пытаюсь сделать, это отправить все символы X количество "шагов" обратно в Альфа-ставку, поэтому, если у меня есть строка с "привет", это будет "gh", если я отправил его на один шаг назад. Там может быть лучший способ сделать это, какие-нибудь советы?

5 ответов


Это называется 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 карты в A

например:

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-это словарь, который создается путем прохождения алфавита, по одному символу за раз. Функция enumerate возвращает кортеж с индексом списка и символом. Мы меняем порядок, создавая новый кортеж с этим кодом:( 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)