python数字转字符串固定位数_python-将String转换为64位整数映射字符以自定…「建议收藏」

python数字转字符串固定位数_python-将String转换为64位整数映射字符以自定…「建议收藏」您将4个不同“数字”的字符串解释为数字,因此以4为基数.如果您有一串实际数字,范围为0-3,则可以让int()真正快速地生成一个整数.defseq_to_int(seq,_m=str.maketrans(‘ACGT’,’0123′)):returnint(seq.translate(_m),4)上面的函数使用str.translate()用匹配的数字替换4个字符中的每个字符(我使用静态s…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

您将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为基的方法很容易赢得这一比较.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189555.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java sort排序[通俗易懂]

    java sort排序[通俗易懂]栗子默认的sort方法,根据元素的自然顺序,将指定的列表按升序排序。第二个方法,根据指定比较器产生的顺序对指定的列表进行排序。快速记忆法参考当前对象与后一个对象进行比较,如果比较结果为1进行交换,其他不进行交换。当后一个对象比当前对象大,返回结果值为1时,前后交换,说明是倒序排列。当后一个对象比当前对象小,返回结果值为1时,前后交换,说明是升序排列。//Integ…

    2022年7月15日
    13
  • JavaScript日期格式化及解析

    JavaScript日期格式化及解析JavaScript开发经常需要对日期进行转换,把日期转成字符串或者从字符串生成日期。JavaScript日期对象内置了简单的日期格式化方法toString()和日期解析方法Date.parse(),这两个方法有较大的局限性,不能自定义自定义日期格式化和解析的字符串格式。下面列出一些常用的日期处理JS库。

    2022年5月25日
    41
  • msm8937之I2C配置

    msm8937之I2C配置msm8937.dtsi中aliases{i2c1=&i2c_1;i2c2=&i2c_2;i2c3=&i2c_3;i2c4=&i2c_4;i2c5=&i2c_5;i2c6=&i2c_6;i…

    2022年10月18日
    2
  • matlab三维图形的绘制[通俗易懂]

    matlab三维图形的绘制[通俗易懂]采用matlab进行三维图绘制mesh函数:网格图mesh(x,y,z)x是n维向量,y是m维向量,z是m*n维向量等高线,底座surf函数:曲面符号隐函数绘图

    2022年10月11日
    2
  • win7任务管理器快捷键是什么

    win7任务管理器快捷键是什么根据小编的观察与发现,发现有些小伙伴不是因为不使用快捷键,而是不知道任务管理器的快捷键。所以为了帮助这些小伙伴,小编今天就来告诉你们打开任务管理器的快捷键是什么。我们的电脑其实在打开一些应用的时候,是有快捷键的。但是往往都是因为我们不知道快捷键是什么,所以才会没有用。所以今天小编就来告诉你们打开任务管理器的快捷键是什么。方法一:任务管理器打开的快捷键:ctrl+alt…

    2022年6月18日
    38
  • IntelliJ IDEA集成svn

    IntelliJ IDEA集成svnEclipse集成svn相信大家已经非常熟悉了,但是IntelliJIDEA如何集成svn呢?下面简单介绍一下(其他的版本控制工具的集成类似):1.首先配置下载并配置svn软件,推荐使用SlikSvn。2.在IntelliJIDEA集成svn,选择Subversion。3.配置完成之后就可以从svn服务器上checkout代码。4.修改代码之后,在该文件或

    2022年10月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号