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中multiply函数_python中numpy库内multiply()、dot()和 * 三种乘法运算的区别小计...

    首先,导入函数包: import numpy as np 1.np.multiply()函数: 数组:(点对点)对应位置元素相乘 矩阵:对应位置元素相乘 示例: A = np.array([[1,2] ...

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

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

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

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

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

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

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

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

最新文章

  1. qt windows 静态编译_VS+QT工程配置问题
  2. POJ 2594 Treasure Exploration (可相交最小路径覆盖)
  3. SpringBoot系列: RestTemplate 快速入门
  4. SwipeRefreshLayout实现上拉加载
  5. python socket服务器多线程_Python多线程socket服务器端
  6. netca 遇到TNS-04612: XXX 的 RHS 为空
  7. 计算机硬件课题,课题:计算机硬件结构介绍
  8. 【Python】Python实战从入门到精通之五 -- 教你使用文件写入
  9. linux系统下装windows双系统,LINUX下安装WINDOWS双系统
  10. 在WebServer中如何实现CGI技术
  11. 【计算机网络】传输层 : 传输层概述 ( 设备层级 | 传输层功能 | TCP 协议 | UDP 协议 | 复用与分用 | 端口号 | 套接字 )
  12. “天池”淘宝用户消费行为分析——sql
  13. 笔记本电脑热点显示正在断开连接,一直无法开启热点,inetsh winsock reset 命令重置可以解决
  14. 青少年CTF - Misc - 上号 Wp WriteUp
  15. 2022-2028年全球与中国智能纺织品产业市场前瞻与投资战略规划分析
  16. 易班自动打卡+钉钉机器人消息提醒
  17. kettle下载百度网盘地址含入门教程2(文本/EXCEL的导入导出)
  18. Metinfo 5.3.17 前台SQL注入漏洞分析及实验
  19. 2018高二计算机会考,2018高二会考时间及考试科目
  20. 2022登高架设考试模拟100题模拟考试平台操作

热门文章

  1. 优质高效,阿里甩出SpringBoot巅峰之作,进阶不二之选
  2. Android仿微信语音聊天
  3. navicat导入excel 日期格式处理
  4. QT自定义控件插件学习笔记
  5. 用大数据解决“痛点”问题 “云上贵州”再发力
  6. MacBook上有哪些值得下载的软件?
  7. 升级鸿蒙手机内数据会删除吗,鸿蒙系统:手机升级不会删除任何文件,包括APP的登录状态都不会掉...
  8. Microsoft visual studio安装2013
  9. 接口文档管理工具showDoc
  10. windows10 下 Haskell 环境搭建2020