How do I slice a string every 3 indices?
本问题已经有最佳答案,请猛点这里访问。
我正在用python为我工作的实验室编程。我如何在给定的字符串中每3个字符切掉一个字符并将其附加到一个列表中?
即:XXXXXXXXXXXXXXXXXXXXXXXXXX(其中x或x是任何给定的字母)
1 2 3 4 5 6 | string = 'XXXxxxXXXxxxXXXxxxXXXxxxXXX' mylist = [] for x in string: string[?:?:?] mylist.append(string) |
我希望列表如下所示:【XXX】、【XXX】、【XXX】、【XXX】、【XXX】等】
有什么想法吗?
简而言之,你不能。
在更长的时间内,您需要编写自己的函数,可能:
1 2 | def split(str, num): return [ str[start:start+num] for start in range(0, len(str), num) ] |
例如:
1 2 3 4 | >>> split("xxxXXX", 3) ['xxx', 'XXX'] >>> split("xxxXXXxx", 3) ['xxx', 'XXX', 'xx'] |
将列表拆分为3个块和将字符串拆分为3个块之间的一个区别是,re模块使用的是字符串而不是列表。
如果性能很重要(即要拆分数千个字符串),则应测试应用程序中各种答案的比较方式。
1 2 3 4 5 6 7 | >>> 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'] |
这是因为
据我所知,没有内置方法允许您将str的每个x索引分块。但是,这应该有效:
1 2 3 4 5 6 | 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) |
生产:
1 | ['str', 'ing', 'Str', 'ing', 'Str', 'ing', 'Str', 'ing'] |
从如何在python中将列表分割成大小均匀的块中复制答案?自11月2008日以来:
直接从python文档(itertools的配方)中获取:
1 2 3 4 5 | 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的建议,另一种方法是:
1 2 3 4 5 | 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) |
我猜吉多的时间机器工作会工作,会工作,会再次工作。