如何每 3 个索引切片一个字符串? [复制]
Posted
技术标签:
【中文标题】如何每 3 个索引切片一个字符串? [复制]【英文标题】:How do I slice a string every 3 indices? [duplicate] 【发布时间】:2011-08-08 08:40:13 【问题描述】:我正在使用 Python 为我工作的实验室编程。如何将给定字符串中的每 3 个字符切出并将其附加到列表中?
即XXXxxxXXXxxxXXXxxxXXXxxxXXX(其中 X 或 x 是任何给定的字母)
string = 'XXXxxxXXXxxxXXXxxxXXXxxxXXX'
mylist = []
for x in string:
string[?:?:?]
mylist.append(string)
我希望列表如下所示:['XXX','xxx','XXX','xxx','XXX'....等]
有什么想法吗?
【问题讨论】:
这与iterating over a list in chunks 非常相似——查看那里的答案以获得一些出色的方法。 【参考方案1】:简而言之,你不能。
在更长的时间内,您可能需要编写自己的函数:
def split(str, num):
return [ str[start:start+num] for start in range(0, len(str), num) ]
例如:
>>> 拆分(“xxxXXX”,3) ['xxx', 'XXX'] >>> 拆分(“xxXXXXXX”,3) ['xxx', 'XXX', 'xx']【讨论】:
【参考方案2】:据我所知,没有内置方法可以让您在每 x 个索引处分块一个 str。但是,这应该有效:
str = "stringStringStringString"
def chunk_str(str, chunk_size):
return [str[i:i+chunk_size] for i in range(0, len(str), chunk_size)]
chunk_str(str,3)
产生:
['str', 'ing', 'Str', 'ing', 'Str', 'ing', 'Str', 'ing']
【讨论】:
甚至没有 .split() 方法? 不——.split
方法仅用于基于字符的拆分。
这是迄今为止我找到的最好的解决方案。干得好!【参考方案3】:
将列表分成 3 个块和将字符串分成 3 个块之间的一个区别是 re 模块使用字符串而不是列表。
如果性能很重要(即您要拆分数千个字符串),您应该测试不同答案在您的应用程序中的比较方式
>>> import re
>>> re.findall('...','XXXxxxXXXxxxXXXxxxXXXxxxXXX')
['XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX']
>>> chunksize=3
>>> re.findall('.%s'%chunksize,'XXXxxxXXXxxxXXXxxxXXXxxxXXX')
['XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX']
这是因为.
在正则表达式中表示“匹配任意字符”。.3
表示“匹配任意 3 个字符”,依此类推
【讨论】:
【参考方案4】:自 2008 年 11 月起从 How do you split a list into evenly sized chunks in Python? 复制答案:
直接来自 Python 文档(itertools 的配方):
from itertools import izip, chain, repeat
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return izip(*[chain(iterable, repeat(padvalue, n-1))]*n)
J.F.Sebastian 建议的另一种选择:
from itertools import izip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
我猜 Guido 的时间机器工作——工作——将工作——将工作——又工作了。
【讨论】:
以上是关于如何每 3 个索引切片一个字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章