python获取字母在字母表对应位置的几种方法及性能对比较

某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://projecteuler.net/problem=42 其中一步解题步骤就是需要把字母换算成字母表中对应的顺序。

获取字母在字母表对应位置的方法,最容易想到的实现的是:

使用str.index 或者str.find方法:

In [137]: "ABC".index('B')

Out[137]: 1

In [138]: "ABC".index('B')+1

Out[138]: 2

#或者在前面填充一个字符,这样index就直接得到字母序号:

In [139]: "_ABC".index("B")

Out[139]: 2

我还想到把字母表转成list或者tuple再index,性能或者会有提高? 或者把字母:数字 组成键值存到字典中是个好办法?

前两天我还自己顿悟到了一个方法:

In [140]: ord('B')-64

Out[140]: 2

ord 和chr 都是python中的内置函数,ord可以把ASCII字符转成对应在ASCII表中的序号,chr则是可以把序号转成字符串。

大写字母中在表中是从65开始,减掉64刚好是大写字母在表中的位置。 小写字母是从97开始,减于96就是对应的字母表位置。

哪种方法可能在性能上更好?我写了代码来测试一下:

az = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

_az = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"

azlist = list(az)

azdict = dict(zip(az,range(1,27)))

text = az*1000000 #这个是测试数据

#str.find和str.index的是一样的。这里就没必要写了。

def azindexstr(text):

for r in text:

az.index(r)+1

pass

def _azindexstr(text):

for r in text:

_az.index(r)

pass

def azindexlist(text):

for r in text:

azlist.index(r)

pass

def azindexdict(text):

for r in text:

azdict.get(r)

pass

def azindexdict2(text):

for r in text:

azdict[r]

pass

def azord(text):

for r in text:

ord(r)-64

pass

def azand64(text):

for r in text:

ord(r)%64

pass

把上面的代码复制粘贴到ipython ,然后用魔法函数%timeit测试各个方法的性能。 ipython 是一个python交互解释器,附带各种很实用的功能,比如文本主要到的%timeit 功能。 请输入pip install ipython安装.

以下是我测试的结果数据:

In [147]: %timeit azindexstr(text)

1 loop, best of 3: 9.09 s per loop

In [148]: %timeit _azindexstr(text)

1 loop, best of 3: 8.1 s per loop

In [149]: %timeit azindexlist(text)

1 loop, best of 3: 17.1 s per loop

In [150]: %timeit azindexdict(text)

1 loop, best of 3: 4.54 s per loop

In [151]: %timeit azindexdict2(text)

1 loop, best of 3: 1.99 s per loop

In [152]: %timeit azord(text)

1 loop, best of 3: 2.94 s per loop

In [153]: %timeit azand64(text)

1 loop, best of 3: 4.56 s per loop

从结果中可见到list.index速度最慢,我很意外。另外如果list中数据很多,index会慢得很严重。 dict[r]的速度比dict.get(r)的速度快,但是如果是一个不存在的键dict[r]会报错,而dict.get方法不会报错,容错性更好。

ord(r)-64的方法速度不错,使用起来应该也是最方便,不用构造数据。

2016年10月15日 20:31:19 codegay ###扩展阅读:

python字母对应序号_python获取字母在字母表对应位置的几种方法及性能对比较相关推荐

  1. python字母表顺序函数_python获取字母在字母表对应位置的几种方法及性能对比较...

    python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...

  2. python读取图片分辨率_python获取网页中所有图片并筛选指定分辨率的方法

    压测时,图片太少,想着下载网页中的图片,然后过滤指定分辨率,但网页中指定分辨率的图片太少了(见下) 后使用格式工厂转换图片 import urllib.request # 导入urllib模块 imp ...

  3. python list删除元素_python中List添加、删除元素的几种方法

    原博文 2015-06-21 18:51 − 一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非 ...

  4. python 字符串删除重复_Python删除list里的重复元素有几种方法?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  5. python怎么清除代码_Python如何清空列表?清空列表的4种方法(代码示例)

    通过Python语言提供的不同构造的方法可以有许多方法来清空列表,下面本篇文章就来给带大家介绍Python中4种清空列表的方法,希望对大家有所帮助. 方法1:重新初始化列表 可以重初始化列表,初始化该 ...

  6. python苹果李子橙_Python 炫技操作:安装包的八种方法

    1. 使用 easy_install easy_install 这应该是最古老的包安装方式了,目前基本没有人使用了.下面是 easy_install 的一些安装示例 #通过包名,从PyPI寻找最新版本 ...

  7. python unicode转中文_Python将Unicode代码转换为中文字符的几种方法,python,unicode,编码,汉字...

    Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分"Unicode字符串" 和"unicode对象"的区别.后面所有的&q ...

  8. python实现位置移动_Python实现 列表左移N个位置的两种方法。

    ''' Created on 2016年12月9日 @author: jiangxh ''' #可用内置函数代替 def reverse(l, left, right): for m in range ...

  9. python汉字拼音查询_python获取一组汉字拼音首字母的方法

    本文实例讲述了python获取一组汉字拼音首字母的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 -*- def m ...

最新文章

  1. 02 数据类型 (向量 数据框 矩阵和列表
  2. arguments.length
  3. 不是keys,记一次因 redis 使用不当导致应用卡死 的过程
  4. [转]删除表中重复记录
  5. 试析C#编程语言的特点及功能
  6. (27)css3 2D转换综合案例—卡包效果
  7. rt-n18u usb3.0 linux ex,2.4G王者 华硕 AUSU RT-N18U 评测
  8. SQL 合并列值和拆分列值
  9. JavaScript学习(六十一)—json字符串的解析和JS 对象的序列化
  10. [QA翻译]如何在Storm里拆分stream流?
  11. 每日一题 字典序的第K小数字
  12. python 串口write 返回值_MicroPython 玩转硬件系列4:串口小实验
  13. C# winform推荐波形图表控件scottplot
  14. 微信公众号网页开发,登录授权和微信支付
  15. 西数发布首款消费级SSD:蓝盘、绿盘齐飞
  16. 学mysql后的收获_数据库课程学习的收获和心得体会
  17. 20200120 数据结构和算法之 数组循环队列的实现
  18. 8.微信小程序-Mobx数据共享(类似vuex)
  19. 机器学习实战——训练模型
  20. 互联网内容审核员,机器背后的“打工人”

热门文章

  1. Office Powerpoint演示文档大瘦身
  2. python环境IDLE下载
  3. K-Net 论文笔记
  4. npm WARN webpack-cli@3.3.11 requires a peer of webpack@4.x.x but none is installed. You must install
  5. 4g状态显示微信未连接服务器,我手机4G网是一直开着的,为什么登录微信确显示未连网!而且微信消息不提醒,但是打开后消息就出来了...
  6. 企业微信实现扫码登录
  7. python降低图片分辨率_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
  8. Linux源码编译-编译哪些设备树
  9. 巴菲特给出了六条人生的建议
  10. html旋转线条,html5 – 为什么我在移动浏览器上看到旋转的条纹?