2024-05-23 18:14:10 发布
网友
出于好奇,在Python上有没有一种方法可以让计算机/程序在不使用range的情况下进行三分之一计数,而是使用切片和索引?例如,如果你有一个类似“CAGCAGCAT”的密码子呢。python可以像这样将字符串分成三部分:CAG-CAG-CAT?我试过了,但失败了。如果有办法,告诉我怎么做。我很好奇
import textwrap textwrap.wrap('CAGCAGCAT' ,3)
退货
您可以使用列表理解,范围的第三个参数是一个步骤:
>>> s = "CAGCAGCAT" >>> [s[i:i+3] for i in range(0, len(s), 3)] ['CAG', 'CAG', 'CAT'] >>>
您可以使用grouper recipe,zip(*[iterator]*n)来收集项目,而不使用range。在
zip(*[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:
len(data)
顺便说一句,grouper recipe可以使用任何迭代器。textwrap.wrap只对字符串有效。此外,石斑鱼的配方更快:
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']
退货
^{pr2}$您可以使用列表理解,范围的第三个参数是一个步骤:
您可以使用grouper recipe,
zip(*[iterator]*n)
来收集项目,而不使用range
。在如果
^{pr2}$len(data)
不是3的倍数,那么上面的内容将去掉余数。要防止这种情况发生,请使用itertools.izip_longest:顺便说一句,grouper recipe可以使用任何迭代器。
textwrap.wrap
只对字符串有效。此外,石斑鱼的配方更快:另请注意,
textwrap.wrap
如果字符串包含空格,textwrap.wrap
可能不会将字符串分组为3个字符的组:相关问题 更多 >
编程相关推荐