您将4个不同“数字”的字符串解释为数字,因此以4为基数.如果您有一串实际数字,范围为0-3,则可以让int()真正快速地生成一个整数.

def seq_to_int(seq, _m=str.maketrans('ACGT', '0123')):

return int(seq.translate(_m), 4)

上面的函数使用str.translate()用匹配的数字替换4个字符中的每个字符(我使用静态str.maketrans() function创建转换表).然后将所得的数字字符串解释为以4为底的整数.

请注意,这将生成一个整数对象,而不是零和一个字符的二进制字符串:

>>> seq_to_int('TGTGAGAAGCACCATAAAAGGCGTTGTG')

67026852874722286

>>> format(seq_to_int('TGTGAGAAGCACCATAAAAGGCGTTGTG'), '016x')

'00ee20914c029bee'

>>> format(seq_to_int('TGTGAGAAGCACCATAAAAGGCGTTGTG'), '064b')

'0000000011101110001000001001000101001100000000101001101111101110'

这里不需要填充;只要您的输入序列为32个字母或更少,则结果整数将适合无符号8字节整数表示形式.在上面的输出示例中,我使用format()字符串分别将该整数值格式化为十六进制和二进制字符串,然后将这些表示形式零填充到64位数字的正确位数.

为了衡量这是否更快,让我们随机抽取一百万个测试字符串(每个字符串长28个字符):

>>> from random import choice

>>> testvalues = [''.join([choice('ATCG') for _ in range(28)]) for _ in range(10 ** 6)]

在使用2.9 GHz Intel Core i7的Macbook Pro和Python 3.6.5上,上述功能可以在3/4秒内产生100万次转换:

>>> from timeit import timeit

>>> timeit('seq_to_int(next(tviter))', 'from __main__ import testvalues, seq_to_int; tviter=iter(testvalues)')

0.7316284350017668

因此,每个通话为0.73微秒.

(以前,我提倡使用预计算版本,但经过试验,我采用了以4为底的想法).

要将其与到目前为止发布的其他方法进行比较,还需要调整一些方法以产生整数,并将其包装到函数中:

def seq_to_int_alexhall_a(seq, mapping={'A': b'00', 'C': b'01', 'G': b'10', 'T': b'11'}):

return int(b''.join(map(mapping.__getitem__, seq)), 2)

def seq_to_int_alexhall_b(seq, mapping={'A': b'00', 'C': b'01', 'G': b'10', 'T': b'11'}):

return int(b''.join([mapping[c] for c in seq]), 2)

def seq_to_int_jonathan_may(seq, mapping={'A': 0b00, 'C': 0b01, 'G': 0b10, 'T': 0b11}):

result = 0

for char in seq:

result = result << 2

result = result | mapping[char]

return result

然后我们可以比较这些:

>>> testfunctions = {

... 'Alex Hall (A)': seq_to_int_alexhall_a,

... 'Alex Hall (B)': seq_to_int_alexhall_b,

... 'Jonathan May': seq_to_int_jonathan_may,

... # base_decode as defined in https://stackoverflow.com/a/50239330

... 'martineau': base_decode,

... 'Martijn Pieters': seq_to_int,

... }

>>> setup = """\n... from __main__ import testvalues, {} as testfunction

... tviter = iter(testvalues)

... """

>>> for name, f in testfunctions.items():

... res = timeit('testfunction(next(tviter))', setup.format(f.__name__))

... print(f'{name:>15}: {res:8.5f}')

...

Alex Hall (A): 2.17879

Alex Hall (B): 2.40771

Jonathan May: 3.30303

martineau: 16.60615

Martijn Pieters: 0.73452

我提出的以4为基的方法很容易赢得这一比较.

python数字转字符串固定位数_python-将String转换为64位整数映射字符以自定...相关推荐

  1. python字符串转64位数字_python-将String转换为64位整数映射字符以自定义两位值映射...

    您将4个不同"数字"的字符串解释为数字,因此以4为基数.如果您有一串实际数字,范围为0-3,则可以让int()真正快速地生成一个整数. def seq_to_int(seq, _m ...

  2. python数字转字符串_python中如何将数字转字符串

    python数字转字符串的实现方法:1.使用格式化字符串,语句如"tt=322 tem='%d' %tt":2.通过"str(5)"方法实现转换. 推荐:< ...

  3. Python数字、字符串、数组之间的相互转换

    在平时刷题中,经常需要在数字.字符串.数组之间做转换,苦于网上没有全面的总结,遂自己稍微总结一下. 文章目录 Python数字.字符串.数组相互转换 Python数组转数字 Python数字转数组 P ...

  4. python数字转字符串_python如何将字符转换为数字

    int(x [,base ])         将x转换为一个整数 long(x [,base ])        将x转换为一个长整数 float(x )             将x转换到一个浮点 ...

  5. python数字和字符串可以运算吗_python数字和字符串对象

    一.python中的数字对象 数字是python当中使用比较广泛的数据类型. 1.数字对象类型 ××× int         如:1,2,3 浮点型 Float  如:1.0,2.0 长××× lo ...

  6. python内置字符串处理函数_Python内置的字符串处理函数

    生成字符串变量 str='python String function' 字符串长度获取:len(str) 例:print '%s length=%d' % (str,len(str)) 连接字符串 ...

  7. python显示小数点后几位数_python窗口编程-3:数位处理(整数)

    我们在上一次课程中(python窗口编程-2:风格与布局 ),制作了完整的计算器窗口界面,只是那个窗口没有真正的功能,是点击任何按钮都会关闭.这一次,我们加入一些事件处理的功能,让它成为一个正常工作的 ...

  8. python数字1 3怎么表示_Python入门篇之数字

    数字类型 数字提供了标量贮存和直接访问.它是不可更改类型,也就是说变更数字的值会生成新的对象.当然,这个过程无论对程序员还是对用户都是透明的,并不会影响软件的开发方式. Python 支持多种数字类型 ...

  9. python显示小数点后几位数_Python编程从入门到实践-连载1(变量和简单数据类型)...

    第二章 变量和简单数据类型 2.2.0 变量 我们添加了一个名为message的变量.每个变量都存储了一个值--与变量相关联的信息.在这里,存储的值为文本"Hello Python worl ...

最新文章

  1. 高温保护_连续4天高温预警!高温作业,这些劳动保护知识一定要懂!
  2. gbdt 回归 特征重要性 排序_GBDT 理解
  3. WPS漏洞利用工具Bully常见命令集合
  4. Java多线程之线程池详解
  5. python 死循环程序能占满cpu吗_运行tensorflow python程序,限制对GPU和CPU的占用操作...
  6. SpringCloud的学习记录(1)
  7. pydobc连接sql server_pyodbc 连接sql server
  8. 怎么用EasyRecovery恢复硬盘内被误删的数据
  9. 百度文库刷财富值软件-第二版
  10. xcode ios 模拟器下载安装
  11. (附源码)springboot球鞋商城 毕业设计 011229
  12. html调用网易云播放器无法自动播放,HTML网页调用 网易云 音乐播放器代码-Go语言中文社区...
  13. 【关于win10任务栏卡死的解决】
  14. (翻译)文章列表(Article List)
  15. 公司KPI考核代码行数,程序员神操作:10行变500行!
  16. 宿主手机联系人、通话记录、短信工具类(不断完善中。。。)
  17. ubuntu安装显卡驱动和cuda
  18. Synergy在Linux与Win10上的下载和安装
  19. 浏览器检测麦克风音量
  20. 基于Python完成的配音软件之适用于有声主播

热门文章

  1. 清华大学黄民烈老师:本科生如何做出好的科研
  2. rust怎么传送到队友_王者荣耀原初法阵怎么传送?原初法阵最多传送几个人?...
  3. python中bind的用法_Javascript中bind()方法的使用与实现
  4. rs232接口_RS232接口与RS485的区别
  5. wps文字表格制作拼音田字格模板_学生练字字帖模板118个打包下载 118个WPS、WORD田字格模板...
  6. NSIS学习笔记(转)
  7. 睡眠排序法-objective C版的代码
  8. win7美化_Windows桌面管理美化,让桌面更加方便、高效
  9. mysql注入 xfkxfk_WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)...
  10. 你必须掌握的常用正则表达式大全