Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将字母表映射为整数?_Python - Fatal编程技术网

如何在Python中将字母表映射为整数?

如何在Python中将字母表映射为整数?,python,Python,我想得到A和C之间的距离是2,我能想到的是使用ord ord('C') - ord('A') #=>2 有更优雅的方法吗?有什么不优雅的地方吗 也许你可以 def get_character_distance(character): return ord(character.upper()) - ord('A') 更好地描述你在做什么。这有什么不优雅的地方 也许你可以 def get_character_distance(character): return ord(char

我想得到A和C之间的距离是2,我能想到的是使用
ord

ord('C') - ord('A')

#=>2

有更优雅的方法吗?

有什么不优雅的地方吗

也许你可以

def get_character_distance(character):
  return ord(character.upper()) - ord('A')

更好地描述你在做什么。

这有什么不优雅的地方

也许你可以

def get_character_distance(character):
  return ord(character.upper()) - ord('A')
为了更好地描述你在做什么。

也许你可以试试:

from string import ascii_letters as letters
def distance(char1,char2):
    return letters.index(char2) - letters.index(char1)
我仍然认为,
ord(char2)-ord(char1)
更酷

一些技术观点:

>>> import timeit
>>> timeit.timeit(stmt='letters.index("C") - letters.index("A")',setup="from string import ascii_letters as letters",number=10000000)
3.5703659057617188
>>> timeit.timeit(stmt='ord("C") - ord("A")',setup="",number=10000000)
0.9403810501098633
结论:
ord(“C”)-ord(“A”)
rocks

也许你可以试试:

from string import ascii_letters as letters
def distance(char1,char2):
    return letters.index(char2) - letters.index(char1)
我仍然认为,
ord(char2)-ord(char1)
更酷

一些技术观点:

>>> import timeit
>>> timeit.timeit(stmt='letters.index("C") - letters.index("A")',setup="from string import ascii_letters as letters",number=10000000)
3.5703659057617188
>>> timeit.timeit(stmt='ord("C") - ord("A")',setup="",number=10000000)
0.9403810501098633

结论:
ord(“C”)-ord(“A”)
rocks

如果您真的不想使用
ord
,您可以按顺序查找字符在所有字母的字符串中的位置-Python恰好在
string
模块中提供了这样一个字符串(或者,其中几个包含不同的内容),字符串确实有一个查找字符位置的方法:

>>> string.ascii_uppercase.index('C')
2

但是,如果效率是一个问题,那么使用
ord
就更好了——它在固定时间内工作,这会进行线性搜索。

如果你真的不想使用
ord
,你可以按顺序在所有字母的字符串中查找字符的位置——Python恰好提供了这样一个字符串(或者,其中几个包含不同的内容)在
string
模块中,字符串确实具有查找字符位置的方法:

>>> string.ascii_uppercase.index('C')
2

但是,如果效率是一个问题,那么使用ord就更好了——它在恒定时间内工作,这是一个线性搜索。

不,这差不多是最好的了

您可能希望构建实际需要的字符的查找,而不是依赖于
ord()
…然后让查找引发异常或默认无效字符

from string import ascii_uppercase
lookup = dict( (ch, idx) for idx, ch in enumerate(ascii_uppercase) )
print 'distance is', lookup['C'] - lookup['A'] # 2
print 'distance is', abs(lookup['A'] - lookup['C']) # still return 2
print 'distance is', lookup['C'] - lookup['a'] # raises KeyError
print 'distance is', lookup['C'] - lookup.get('a', 0) # effectively returns lookup['C']

不,这是最好的了

您可能希望构建实际需要的字符的查找,而不是依赖于
ord()
…然后让查找引发异常或默认无效字符

from string import ascii_uppercase
lookup = dict( (ch, idx) for idx, ch in enumerate(ascii_uppercase) )
print 'distance is', lookup['C'] - lookup['A'] # 2
print 'distance is', abs(lookup['A'] - lookup['C']) # still return 2
print 'distance is', lookup['C'] - lookup['a'] # raises KeyError
print 'distance is', lookup['C'] - lookup.get('a', 0) # effectively returns lookup['C']

使用ord()有什么不雅观?使用ord()有什么不雅观?