算上Python的三分之一

2024-05-23 18:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

出于好奇,在Python上有没有一种方法可以让计算机/程序在不使用range的情况下进行三分之一计数,而是使用切片和索引?例如,如果你有一个类似“CAGCAGCAT”的密码子呢。python可以像这样将字符串分成三部分:CAG-CAG-CAT?我试过了,但失败了。如果有办法,告诉我怎么做。我很好奇


Tags: 方法字符串程序计算机情况切片rangecat
3条回答
import textwrap
textwrap.wrap('CAGCAGCAT' ,3)

退货

^{pr2}$

您可以使用列表理解,范围的第三个参数是一个步骤:

>>> s = "CAGCAGCAT"
>>> [s[i:i+3] for i in range(0, len(s), 3)]
['CAG', 'CAG', 'CAT']
>>> 

您可以使用grouper recipezip(*[iterator]*n)来收集项目,而不使用range。在

In [96]: data = 'CAGCAGCAT'

In [97]: [''.join(grp) for grp in zip(*[iter(data)]*3)]
Out[97]: ['CAG', 'CAG', 'CAT']

如果len(data)不是3的倍数,那么上面的内容将去掉余数。要防止这种情况发生,请使用itertools.izip_longest

^{pr2}$

顺便说一句,grouper recipe可以使用任何迭代器。textwrap.wrap只对字符串有效。此外,石斑鱼的配方更快:

In [100]: %timeit textwrap.wrap(data, 3)
10000 loops, best of 3: 17.7 µs per loop

In [101]: %timeit [''.join(grp) for grp in zip(*[iter(data)]*3)]
100000 loops, best of 3: 1.78 µs per loop

另请注意,textwrap.wrap如果字符串包含空格,textwrap.wrap可能不会将字符串分组为3个字符的组:

In [42]: textwrap.wrap('I am a hat', 3)
Out[42]: ['I', 'am', 'a', 'hat']

相关问题 更多 >