如何按字符分割一个或多个索引

时间:2018-03-19 23:39:41

标签: python string split

字符串的split方法只接受分隔符的参数,但是如何通过每个(或每个其他等)字母轻松分割?这种方法可以按每个字母分割,但对于一个简单的任务来说似乎很笨拙。

a=' '.join(string.ascii_lowercase).split()

我想一个函数可以做到这一点:

def split_index(string,index=1):
    split=[]
    while string:
        try:
            sect = string[:index]
            string = string[index:]
            split.append(sect)
        except IndexError:
            split.append(string)
    return split

print(split_index('testing'))   # ['t', 'e', 's', 't', 'i', 'n', 'g']
print(split_index('testing',2)) # ['te', 'st', 'in', 'g']

如果之前没有人希望这样做,或者如果没有更简单的内置方法,我会感到惊讶。但我以前错了。如果这样的事情不值得,或者我错过了一个细节,那么问题就可以删除/删除。

2 个答案:

答案 0 :(得分:0)

字符串是字符的可迭代,因此将其拆分为字符就像迭代字符一样简单。这样做的一种方法就是将其提供给内置的list()

list("testing") # ['t', 'e', 's', 't', 'i', 'n', 'g']

文档还为grouper()方法提供了一个方法,它将采用迭代并将其分组为给定大小的块,因为字符串是可迭代的,这只适用于它们。这可以非常有效,因为它很懒惰并且使用快速itertools函数:

import itertools

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.zip_longest(*args, fillvalue=fillvalue)

E.g:

groups = list(grouper("testing", 2)) # [('t', 'e'), ('s', 't'), ('i', 'n'), ('g', None)]]
["".join(char for char in group if char) for group in groups] # ['te', 'st', 'in', 'g']

显然,如果你只是迭代字符,你就不需要制作一个列表 - 直接遍历字符串或grouper() iterable。

答案 1 :(得分:0)

您可以尝试这样做:

string = "testing"

def splitByN(string,n):
    return [string[i:i+n] for i in range(0,len(string),n)]

print(splitByN(string,2))

输出:

['te', 'st', 'in', 'g']