在Python中将字母转换为数字

如何完成以下步骤?

characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u''v''w''x''y''z']

numbers = ['1''2''3''4''5''6''7''8''9''10''11''12''13''14''15''16''17''18''19''20''21''22''23''24']

text = raw_input(' Write text: ')

我已经尝试了许多方法来解决它,但无法做到。 我想做事。 如果我键入“ hello”,则输出的数字将按字母顺序排列。 示例a = 1 <字母。

altin asked 2020-02-06T03:46:14Z

14个解决方案

77 votes

那么这样的事情呢:

print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]

奥德

清单理解

ASCII字符代码

编辑

自从你问我要解释后,我会...尽管[?]已经在评论中很好地解释了它。

让我们从不止一行开始。

input = raw_input('Write Text: ')

input = input.lower()

output = []

for character in input:

number = ord(character) - 96

output.append(number)

print output

这做同样的事情,但更具可读性。 在尝试理解我的第一个答案之前,请确保您了解这里发生的情况。 这里的一切都是非常标准的,简单的Python。 要注意的一件事是ord函数。 ord代表序数,几乎每种高级语言都将提供此类功能。 它为您映射到任何字符的数字表示形式。 ord的逆函数称为chr。

chr(ord('x')) == 'x' # for any character, not just x.

如果您自己进行测试,则a的序数为97(我上面发布的第三个链接将显示完整的ASCII字符集。)每个小写字母的范围为97-122(26个字符)。因此,如果您减去 从任何小写字母的序号96开始,假设您采用'a'== 1,您将获得其在字母表中的位置。因此,'b'== 98,'c'== 99等的序数。当您 减去96,'b'== 2,'c'== 3,依此类推。

我发布的初始解决方案的其余部分只是一些Python技巧,您可以学习这些技巧,称为列表理解。 但是,我不会像在奥尔德是你的朋友的情况下那样专注于学习以任何语言来解决问题。 我希望这有帮助。

sberry answered 2020-02-06T03:47:04Z

15 votes

您可以使用chr()和ord()在字母和整数之间进行转换。

这是一个简单的例子。

>>> chr(97)

'a'

>>> ord('a')

97

Statham answered 2020-02-06T03:47:29Z

9 votes

如果要大量使用此转换,请考虑计算一次并将结果放入字典中:

>>> import string

>>> di=dict(zip(string.letters,[ord(c)%32 for c in string.letters]))

>>> di['c']

3

优点是字典查找非常快,而在每次调用时都遍历列表。

>>> for c in sorted(di.keys()):

>>> print "{0}:{1} ".format(c, di[c])

# what you would expect....

the wolf answered 2020-02-06T03:47:53Z

8 votes

不必太基础,但这是:

>>> char1 = ['a''b''c''d''e''f''g''h''i''j''k''l'

'm''n''o''p''q''r''s''t''u''v''w''x''y''z']

与此非常不同:

>>> char2 = ['a','b','c','d','e','f','g','h','i','j','k','l',

'm','n','o','p','q','r','s','t','u','v','w','x','y','z']

第一个没有逗号和问题的内容是一个包含26个元素的字符串的一个元素列表。 第二个是26个元素列表,每个列表的长度为单个字符。

如果打印每个:

>>> print char1, len(char1), len(char1[0])

['abcdefghijklmnopqrstuvwxyz'] 1 26

>>> print char2, len(char2), len(char2[0])

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',

'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 26 1

显然,需要采取额外的步骤才能将characters=['a''b''c'...]的各个字符变成可迭代的字符。

如果您具有从“ a”到“ z”和/或从“ A”到“ Z”的字符序列,则可以通过列表理解轻松返回该字符的编号:

>>> [ord(x)%32 for x in char2]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,

17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

对于您拥有的数据结构类型,您需要首先访问该字符串:

>>> [ord(x)%32 for x in char1[0]]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,

17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

因此,如果您的代码清单与您的问题相同,则可能是您的问题。

合理的替代方法是:characters=['a''b''c'...]

您可以看到您的characters=['a''b''c'...](不带逗号)与在像['abc...']这样的列表中键入字符串中的所有字符一样。

所以现在尝试:

>>> import string

>>> [ord(x.lower())-96 for x in string.letters]

[1,2,...26, 1,2,3...26] # my ellipses

>>> char3=[string.letters] # one string as element[0]

>>> [ord(x)%32 for x in char3[0]]

>>> [ord(x)%32 for x in [string.letters][0]]

dawg answered 2020-02-06T03:48:58Z

6 votes

这是我以前用于此目的的功能。 适用于大写和小写。

def convert_char(old):

if len(old) != 1:

return 0

new = ord(old)

if 65 <= new <= 90:

# Upper case letter

return new - 64

elif 97 <= new <= 122:

# Lower case letter

return new - 96

# Unrecognized character

return 0

parent5446 answered 2020-02-06T03:49:18Z

5 votes

像这样

[str(ord(c)&31) for c in text]

Kabie answered 2020-02-06T03:49:38Z

3 votes

>>> [str(ord(string.lower(c)) - ord('a') + 1) for c in string.letters]

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17',

'18', '19', '20', '21', '22', '23', '24', '25', '26', '1', '2', '3', '4', '5', '6', '7', '8',

'9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24',

'25', '26']

marcog answered 2020-02-06T03:49:54Z

3 votes

def letter_to_int(letter):

alphabet = list('abcdefghijklmnopqrstuvwxyz')

return alphabet.index(letter) + 1

在此,如果列表包含x,则索引(x)函数将返回x的位置值。

ehfgk78 answered 2020-02-06T03:50:14Z

2 votes

这是我用来将excel列字母转换为数字的方法(因此限制为3个字母,但是如果您需要更多,可以很容易地扩展它)。 可能不是最好的方法,但是它可以满足我的需求。

def letter_to_number(letters):

letters = letters.lower()

dictionary = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8,'i':9,'j':10,'k':11,'l':12,'m':13,'n':14,'o':15,'p':16,'q':17,'r':18,'s':19,'t':20,'u':21,'v':22,'w':23,'x':24,'y':25,'z':26}

strlen = len(letters)

if strlen == 1:

number = dictionary[letters]

elif strlen == 2:

first_letter = letters[0]

first_number = dictionary[first_letter]

second_letter = letters[1]

second_number = dictionary[second_letter]

number = (first_number * 26) + second_number

elif strlen == 3:

first_letter = letters[0]

first_number = dictionary[first_letter]

second_letter = letters[1]

second_number = dictionary[second_letter]

third_letter = letters[2]

third_number = dictionary[third_letter]

number = (first_number * 26 * 26) + (second_number * 26) + third_number

return number

Kurt Maupin answered 2020-02-06T03:50:34Z

1 votes

如果目标是仅转换字母abcd .... xyz和ABCD .... XYZ,我将使用一个函数:

from string import letters

def rank(x, d = dict((letr,n%26+1) for n,letr in enumerate(letters[0:52]))):

return d[x]

我写了[0:52]是因为我的Python 2.7版本显示了该值

* ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

用于string.letters参数。

因为参数d接收一个值作为默认参数,所以在执行函数定义以生成函数对象的那一刻,该值的演算仅执行一次。因此,即使该函数被调用了三千次,也可以在不重新计算该值的情况下使用该函数。

顺便说一下,该函数的每次调用都不再使用lower()。 在构造默认参数时已处理了大写字母的情况。

一个使用示例:

word = 'supercalifragilisticexpialidocious'

print ''.join( letter if rank(letter)%3!=0 else '.' for letter in word)

结果:

s.pe..a .... ag ... st..e.p.a.d ..... s

它也可以与map()一起使用:

print map(rank,'ImmunoElectroPhoresis')

结果:

[9、13、13、21、14、15、5、12、5、3、20、18、15、16、8、15、18、5、19、9、19]

eyquem answered 2020-02-06T03:51:52Z

1 votes

如果您只是想将数字映射到字母,则只需执行以下简单操作:

def letter_to_index(letter):

_alphabet = 'abcdefghijklmnopqrstuvwxyz'

return next((i for i, _letter in enumerate(_alphabet) if _letter == letter), None)

当然,如果要使其从1开始,则只需添加(i + 1代表i,...等。

regularex answered 2020-02-06T03:52:17Z

1 votes

如果您正相反,例如1 = A,2 = B等,则可以使用以下代码。 请注意,由于我只能将一个班级的班级转换为A,B,C等,所以我最多只能升至2级。

loopvariable = 0

numberofdivisions = 53

while (loopvariable

if(loopvariable<26):

print(chr(65+loopvariable))

loopvariable +=1

if(loopvariable > 26 and loopvariable <53):

print(chr(65)+chr(65+(loopvariable-27)))

Haris Np answered 2020-02-06T03:52:37Z

1 votes

使用此功能。 它将字母字符串转换为其等效的数字值:

def convAlph2Num(sent):

alphArray = list(string.ascii_lowercase)

alphSet = set(alphArray)

sentArray = list(sent.lower())

x = []

for u in sentArray:

if u in alphSet:

u = alphArray.index(u) + 1

x.append(u)

print(x)

return

dabire answered 2020-02-06T03:52:57Z

0 votes

这是我要解决的问题的解决方案,其中您要转换字符串中所有字母的位置,并以字母的位置返回英文字母的位置。

[https://gist.github.com/bondnotanymore/e0f1dcaacfb782348e74fac8b224769e]

如果您想详细了解它,请告诉我。我使用了以下概念  -列表理解  -字典理解

nomoreabond2017 answered 2020-02-06T03:53:27Z

python数字形式转换_在Python中将字母转换为数字相关推荐

  1. python123数字形式转换_【Python系统学习02】数据类型与类型转换

    数据类型与类型转换 一.数据类型 字符串 整数 浮点数 [补充中...] 1.字符串 str 字符串:英文string,简写str. name = '小石头:' print(name,'2019', ...

  2. python字母变成数字怎么办_在Python中将字母转换为数字

    14 个答案: 答案 0 :(得分:71) 这样的事情: print [ord(char) - 96 for char in raw_input('Write Text: ').lower()] 修改 ...

  3. c++ascii码转换为数字_在C++中将字符串转换为数字

    有许多情况需要将数字转换为字符串或将字符串转换为数字.本文中提到了一些实现此任务的方法. 将字符串转换为数字 方法1:使用stringstream类或sscanf() 方法2:使用stoi()或ato ...

  4. python ip地址转换_Python实现将IP地址转换为数字

    首先先说IP地址的定义:网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议.在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守 ...

  5. python和json转换_【Python】python和json数据相互转换,json读取和写入,repr和eval()使用...

    Gson将字符串转换成JsonObject和JsonArray 以下均利用Gson来处理: 1.将bean转换成Json字符串: public static String beanToJSONStri ...

  6. java 将单词转换为_在Java中将单词转换为数字

    我已经看到很多算法,你给它们一个数字说"123",它将它转换为123.但我似乎无法找到相反的东西,而我确实找到的只能达到数字1000,任何人都可以用正确的方式指导我,因为我可以做的 ...

  7. python实现数字形式转换

    python实现数字形式转换 题目: 获得用户输入的一个正整数输入,输出该数字对应的中文字符表示.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪ ...

  8. Python学习笔记 | 练习1:数字形式转换 I

    数字形式转换 I 获得用户输入的一个正整数输入,输出该数字对应的中文字符表示.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫ ...

  9. python如何删除代码_Python如何删除除字母和数字之外的所有字符?(代码示例)

    字符串操作是日常编码和Web开发中非常重要的任务:例如:HTTP查询中的大多数请求和响应都是字符串形式,有时我们需要删除一些无用的数据.下面本篇文章就来给大家介绍一些Python方法来将指定字符串中除 ...

最新文章

  1. php自动加载和实现方法,php 自动加载方法
  2. 【mysql】SQL常用指令
  3. 个人机房重构--七层实现登录
  4. linux 查看zookeepr所在路径,Linux系统:Centos7下搭建ZooKeeper3.4中间件,常用命令总结...
  5. Centos6.7系统环境下使用 yum install 安装mysql-community-5.7.22(史上最简)
  6. sql 生成一列1到10的数字_SQL 打印矩阵(三)
  7. java 通用对象_java 通用对象排序
  8. 【AAAI2021】NLP所有方向论文列表(情感分析、句法、NER、对话/问答、关系抽取、KD等)...
  9. windows bat 批处理常用命令
  10. WIN7 Activation,完美激活Windows 7,开机无字符,无OEM信息
  11. U盘被写保护不能重新格式化
  12. 解决swiper动态改变数据后分页混乱问题
  13. AI视觉千亿规模市场虚席以待 初创企业看好“算法决定芯片”路径
  14. FCN全卷积网络模型——高分辨率遥感影像地物识别
  15. 多策略融合算术优化算法
  16. 知識は潜在能力、行動は力CommentsAdd Star
  17. 海港中学2021高考成绩查询,热烈祝贺海港高中2020年高考再创佳绩
  18. 计算字符串的距离(编辑距离)
  19. 关于SimpleDateFormat格式化无法精确到微妙、纳秒的处理
  20. [dt]世纪历史长河年代表

热门文章

  1. Query String Parameters、Form Data、Request Payload的区别
  2. Java核心类库篇5——异常
  3. SpringBoot中注入ApplicationContext对象的三种方式
  4. c++调用python接口作用是_利用Boost::Python实现C++调用python接口
  5. 全栈工程师薪水_2020 Java 全栈工程师进阶路线图,不可错过
  6. Android面试基础一
  7. mysql 查询语句 过滤_MySQL全面瓦解7:查询的过滤条件
  8. jumpserver 使用教程_Jumpserver之快速入门
  9. KMP算法 串模式识别 用nextval[j]改进next[j]
  10. defaultdict python3,Python collections.defaultdict() 与 dict的使用和区别|python3教程|python入门|python教程...