python:如何为字母赋值?

Posted

技术标签:

【中文标题】python:如何为字母赋值?【英文标题】:python: How do I assign values to letters? 【发布时间】:2011-03-15 20:19:04 【问题描述】:

我想为字母表中的每个字母分配一个值,以便 a -> 1, b -> 2, c -> 3, ... z -> 26。类似于返回值的函数字母,例如:

value('a') = 1

value('b') = 2

等等……

我将如何在 python 中执行此操作?

【问题讨论】:

您找到教程中关于dict 结构的部分了吗?如果没有,请跳到该部分。你目前正在使用什么教程? 【参考方案1】:

你想要一个原生的 Python 字典。

(您可能还希望您的值从 "0" 而不是从 "1" 开始,因此您可以避免在所有映射上添加 +1,如下所示)

用这个构建一个:

import string
values = dict()
for index, letter in enumerate(string.ascii_lowercase):
   values[letter] = index + 1

这给了你这样的东西:

print values["a"]
-> 1

当然,您可能可以使用“ord”内置函数并完全跳过此字典,就像其他答案一样:

print ord("c") - (ord("a")) + 1

或者在 python 3.x 或 2.7 中,您可以使用 dict 生成器表达式一次性创建字典:

values = chr(i): i + 1 for i in range(ord("a"), ord("a") + 26)

【讨论】:

您可以使用enumerate(string.ascii_lowercase,1) 避免在循环中将1 添加到index【参考方案2】:

如果只想将ASCII字母的字符映射为数字,可以使用ord(),然后调整结果:

>>> ord('a') - 96
1

如果你想让它也适用于大写字母:

>>> ord('A'.lower()) - 96
1

此外,您可能想要验证参数确实是单个 ASCII 字符:

>>> char = 'a'
>>> len(char) == 1 and char.isalpha() and 'a' <= char <= 'z'
True

或者:

>>> import string
>>> len(char) == 1 and char in string.ascii_lowercase
True

【讨论】:

【参考方案3】:
def value(letter):
    return ord(letter) - ord('a') + 1

【讨论】:

这对我来说似乎比 dict 更明智,但需要一些范围检查、大小写检查等。 真的吗,内德?我的意思是,这是 70 年代 C 语言中最先进的技术,但 Python 确实 将 dict 作为本机、内置、优化的数据结构。使用dict,OP可以进一步为大写值分配相同或不同的代码;标点符号的特殊代码;并且可以使用if ch in ch2valuedict:而不是讨厌的旧if ord('a') &lt;= ch &lt;= ord('z'):等来检查有效性。我们的Python有dicts,我们应该使用它们,当它们非常合适时,我们应该引导初学者使用它们。 @Paul,这个问题在细节上相当稀疏,但它确实包含了“功能”这个词。很容易发明OP未提及的要求,并确定字典是最好的方法。但可能他的下一个需要是为中国人做“同样的事情”。你可能是对的,如果我们对正在构建的整个系统了解更多,字典可能是最好的方法。但是单看问的问题,我觉得这样一个简单的函数还是很合理的。 @Paul McGuire: tzk,tzk - 请告诉我,if ord('a') &lt;= ch &lt;= ord('z'): 使用哪种语言?因为它不是 Python。如果 ch 是单字符字符串,则不是。 @Nas - oof,我最近一直在用 C 语言工作,其中一些泄漏到我大脑的 Python 部分!【参考方案4】:

对键值对使用dictionary。尽管对于像这样的简单映射,可能有一些聪明的方法可以做到这一点。

【讨论】:

【参考方案5】:
from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get

【讨论】:

【参考方案6】:

您应该利用“a”、“b”等背后都有 ASCII 值这一事实。

ord('a') # this returns int 97
ord('b') # this returns int 98

因此,您可以执行以下操作:

ord(letter) - ord('a') + 1 # e.g., a: 97 - 97 + 1 = 1

【讨论】:

【参考方案7】:

为什么不直接列出字母表中的每个字母,然后使用索引值作为返回值

【讨论】:

【参考方案8】:

这个怎么样?

import string
value = lambda x: string.ascii_lowercase.index(x) + 1

In [1]: value("a")
Out[1]: 1

【讨论】:

【参考方案9】:

不需要导入库。你可以使用这个:

value = dict(zip("abcdefghijklmnopqrstuvwxyz", range(1,27)))

【讨论】:

【参考方案10】:

您可以使用 ord 内置函数。这个功能很好地满足你的需求

def letter_value(letter):
    return ord(letter) - ord("a") + 1

【讨论】:

以上是关于python:如何为字母赋值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为以下容器赋值?

如何为 Base32 类使用不同的字母表?

spring @Value如何为变量java赋值[关闭]

如何为给定字符串中名称的符号赋值

如何为C中的字符串数组赋值?

如何用SQL代码将动态查询结果赋值给变量?