如何每3个索引切割字符串?

12 投票
4 回答
24793 浏览
提问于 2025-04-16 16:00

我在实验室用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']

撰写回答