Получить положение символа в алфавите - PullRequest
30 голосов
/ 08 мая 2011

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

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

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

РЕДАКТИРОВАТЬ: Что я пытаюсьсделать, это отправить все символы X количество «шагов» обратно в альфа-ставку, поэтому, если у меня есть строка с «привет», это будет «GH», если я отправил его обратно на один шаг.Может быть, есть лучший способ сделать это, какие-нибудь советы?

Ответы [ 6 ]

55 голосов
/ 08 мая 2011

Это называется index. Например,

>>> import string
>>> string.lowercase.index('b')
1
>>> 

Примечание: в Python 3 string.lowercase было переименовано в string.ascii_lowercase.

20 голосов
/ 08 мая 2011

без ввоза

def char_position(letter):
    return ord(letter) - 97

def pos_to_char(pos):
    return chr(pos + 97)
2 голосов
/ 08 мая 2011

Вы можете использовать ord (), чтобы получить позицию ASCII символа, и chr (), чтобы преобразовать позицию ASCII в символ.

РЕДАКТИРОВАТЬ: Обновлено, чтобы обернуть алфавит, так что 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'). Это будет работать только для строчных слов.

0 голосов
/ 01 декабря 2018

Вот метод перехвата всех, который может быть полезен для кого-то ...

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
0 голосов
/ 07 ноября 2016

Я только начал изучать 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)
0 голосов
/ 09 мая 2011
# 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].В вашем примере второй алфавит будет просто сдвинут на два символа, но вы также можете случайным образом перетасовать символы или использовать какой-либо другой шаблон для их упорядочивания.Все это будет продолжать работать с другими алфавитами, такими как греческий, кириллица и т. Д.

...