获取字母表中的字符位置

问题描述 投票:0回答:7

我 90% 确定有一个内置函数可以执行此操作。

我需要找到一个字符在字母表中的位置。所以字符“b”是位置1(从0开始计数),等等。有谁知道这个函数叫什么?

我想做的是将所有字符 X 数量的“步数”发送回字母赌注中,所以如果我有一个带有“hi”的字符串,如果我将其发送回一步,它将是“gh” 。可能有更好的方法,有什么建议吗?

python position character alphabet
7个回答
115
投票

它被称为

index
。例如:

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

注意:在 Python 3 中,

string.lowercase
已重命名为
string.ascii_lowercase


51
投票

无需导入

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

def pos_to_char(pos):
    return chr(pos + 97)

4
投票

您可以使用 ord() 获取字符的 ASCII 位置,并使用 chr() 将 ASCII 位置转换为字符。

编辑:更新为换行字母表,因此 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')。它仅适用于小写单词。


2
投票
# 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] 的编码形式。在您的示例中,第二个字母表将仅移动两个字符,但您也可以随机打乱字符或使用其他模式对它们进行排序。所有这些都将继续适用于其他字母,例如希腊语、西里尔字母等。


1
投票

我才刚刚开始学习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
投票

这是一个可能对某人有用的包罗万象的方法...

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
投票

Excel中COLUMN函数的等价物

def position(word):
    if len(word)>1:
        pos = 0
        for idx, letter in enumerate(word[::-1]):
            pos += (position(letter)+(1 if idx!=0 else 0))*26**(idx)
        return pos
    return ord(word.lower()) - 97


print(position("A")) --> 0
print(position("AA")) --> 26
print(position("AZ")) --> 51
© www.soinside.com 2019 - 2024. All rights reserved.