如何每3个索引切割字符串?
我在实验室用Python编程。我想从一个给定的字符串中每隔三个字符切出一段,然后把这些段放到一个列表里。
比如说,字符串是这样的:XXXxxxXXXxxxXXXxxxXXXxxxXXX(这里的X或x可以是任何字母)。
string = 'XXXxxxXXXxxxXXXxxxXXXxxxXXX'
mylist = []
for x in string:
string[?:?:?]
mylist.append(string)
我希望列表的样子是这样的:['XXX','xxx','XXX','xxx','XXX'....等等]
有没有什么好主意?
4 个回答
4
据我所知,Python里没有直接的方法可以让你每隔x个字符把一个字符串分成一块一块的。不过,下面这个方法可以实现这个功能:
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']
7
把列表分成每3个一组和把字符串分成每3个一组有一个不同点,那就是正则表达式模块是用来处理字符串的,而不是列表。
如果性能很重要(比如你需要分割成千上万的字符串),你应该在你的应用中测试一下不同方法的效果。
>>> 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个字符”,以此类推。
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']