python字符串转64位数字_python-将String转换为64位整数映射字符以自定义两位值映射...
您将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 = """\
... 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字符串转64位数字_python-将String转换为64位整数映射字符以自定义两位值映射...相关推荐
- 如何检查一个Python字符串是否只包含数字?
如何检查一个Python字符串是否只包含数字? python String类中有一个名为isdigit()的方法,如果字符串中所有字符都是数字且至少有一个字符,则返回true,否则返回false. p ...
- python字符串以什么标志结束_python字符串结束符
python字符串结束符的更多内容_CSDN博客 2016-05-22 python 字符串末尾换行符处理 - qiqiaiairen的博客 - CSDN博... 找到以"imooc"开头和结尾的字符 ...
- python字符串操作符结果没显示_Python字符串格式化 (%操作符)
在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出.Python中内置有对字符串进行格式化的操作%. 模板 格式化字符串时,Python使用一个字符串作为模板.模 ...
- 【python作业】编写一个函数,由实参传来一个字符串,统计此字符串中字母和数字的个数,在主函数中输入字符串并输出上述的结果。
编写一个函数,由实参传来一个字符串,统计此字符串中字母和数字的个数,在主函数中输入字符串并输出上述的结果. def fun(s):count1 = 0count2 = 0for i in s:if i ...
- 将一个长度最多为30位数字的十进制非负整数转换为二进制数(Java)
package Four; import java.math.BigInteger; /** java中有许多数字处理的类,比如有Interger类,但是Integer有一定的局限性* Integer ...
- Random随机生成几位数字和UUID随机生成几位字母加数字组合
Random随机生成几位数字和UUID随机生成几位字母加数字组合 public class TestRandom { public static void main(String[] args) { ...
- 如何把32位的注册表文件转换为64位的?
问题:比如 我的系统是64位的WIN7,但下载的极品飞车14的注册表导入文件却是32位的,于是不能用,还好网上有人做了64位的导入文件.我想知道那些达人是怎么把32位的改成64位的? 把32位的注册表 ...
- 进制转换:将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出. 输入 多组数据,每行为一个长度不超过30位的十进制非负整数. (注意是10进制数字的个数可能有30个,而非30bits的整数) ...
- 24位深的bmp图片转换为16位深RGB565格式的bmp图片源码
/**24位深的bmp图片转换为16位深RGB565格式的bmp图片**/ #include <iostream> #include <stdio.h> #include &l ...
最新文章
- python之模块base64
- python3知识点之---------字符串的介绍
- MySQL: Root element is missing
- 黑马lavarel教程---6、简单验证
- 【C++】智能指针简述(五):解决循环引用的weak_ptr
- DiskFileItemFactory API详解
- POJ 3660 Cow Contest(传递闭包floyed算法)
- mfc try catch 捕获并显示_“全栈2019”Java异常第十七章:Error该不该被捕获?
- 小爱同学app安卓版_小爱课程表3.0全新升级 课表倒入更简单所有手机能用
- Le-net网络总结
- sql/c#十六进制与十进制的转换
- Git bash的中文化支持
- Microsoft Office 2010 Service Pack 2
- Prototype使用$w()函数
- EditPlus for python
- hdu 1284 钱币兑换问题 (递推 || DP || 母函数)
- 话说网页长啥样,到底谁说了算??
- native2ascii编码转换
- 苹果系统mac(Air)删除Windows合并盘(双系统)的可行方案
- Python中参数前面的星号
热门文章
- win10 html css,Win10创造者更新:Edge支持CSS自定义属性
- 设计灵感|延展画面的插画Banner设计!
- 难以拒绝的中国风雅致新年元旦海报来袭
- 会话和连接的区别_websocket和ajax区别,只有这5点不同
- python图片横向合并_python3 图片横向合并
- 2021年三月中旬推荐阅读文章
- Django:cmd虚拟环境及第一个project、Pycharm虚拟环境及第一个project、Not Found favicon.ico、Windows命令行创建虚拟环境、Django版本选择
- oracle 新增字段id 并赋值32位_优雅的数据库ID设计
- Maven中几张重要的总结图
- SpingMVC Model 和ModelAndView,以及从参数的设置和接收