我正在使用Python为我工作的实验室编程。如何切出给定字符串中的每3个字符并将其附加到列表中?
即。 XXXxxxXXXxxxXXXxxxXXXxxxXXX(其中X或x是任何给定的字母)
string = 'XXXxxxXXXxxxXXXxxxXXXxxxXXX'
mylist = []
for x in string:
string[?:?:?]
mylist.append(string)
我希望列表看起来像这样:['XXX','xxx','XXX','xxx','XXX'......等等]
有什么想法吗?
答案 0 :(得分:20)
简而言之,你不能。
更长一段时间,你需要编写自己的函数,可能:
def split(str, num):
return [ str[start:start+num] for start in range(0, len(str), num) ]
例如:
>>> split("xxxXXX", 3) ['xxx', 'XXX'] >>> split("xxxXXXxx", 3) ['xxx', 'XXX', 'xx']
答案 1 :(得分:7)
将列表拆分为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个字符”,依此类推
答案 2 :(得分:4)
据我所知,没有内置方法可以让你在每个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']
答案 3 :(得分:1)
自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的时间机器工作 - 工作 - 将有效 - 将再次工作。