将字符串分割成等长的列表项

6

我有一个没有空格的字符串,我需要将其拆分为等长的列表项。我知道有split()方法,但据我所知,它仅通过空格进行拆分,而不是通过长度进行拆分。

我想做的事情就像这样:

string = "abcdefghijklmnopqrstuvwx"
string = string.Split(0 - 3)
print(string)

>>> ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx"]

我考虑过通过循环列表来解决,但我想知道是否有更简单的解决方案?


@m.wasowski,你所指的问题要求迭代器,稍有不同。 - Eric O. Lebigot
4个回答

19
>>> [string[start:start+4] for start in range(0, len(string), 4)]
['abcd', 'efgh', 'ijkl', 'mnop', 'qrst', 'uvwx']

即使最后一段少于4个字符,它也能正常工作。

附注:在Python 2中,应使用xrange()而不是range()


2
完美,像魔法一样运行,现在我只需要再等待4分钟来接受答案! - Chris Headleand

3

你觉得呢:

>>> string = 'abcdefghijklmnopqrstuvwx'
>>> map(''.join, zip(*[iter(string)]*4))
['abcd', 'efgh', 'ijkl', 'mnop', 'qrst', 'uvwx']
>>>

可爱但浪费资源:将字符串分解为字符,然后重新组合。此外,当字符串长度不是4的倍数时,这种方法无法选择最后几个字符。 - Eric O. Lebigot

2

或者:

map(lambda i: string[i:i+4], xrange(0, len(string), 4))

xrange很好。但是map+lambda显然没有列表推导式清晰... - Eric O. Lebigot

1
使用标准库模块textwrap
>>> import textwrap
>>> textwrap.wrap('abcdefghijklmnopq', 4)
['abcd', 'efgh', 'ijkl', 'mnop', 'q']

编辑:糟糕,这个方法在处理空格时不起作用。但我仍然保留这个答案,因为上次我遇到类似问题时,实际上是想要换行文本,所以也许其他人也有同样的问题。


1
这在“Hi!\nOh!\nAh!”上失败了。实际上,textwrap.wrap()是用于包含单词的段落的。 - Eric O. Lebigot
1
我刚刚注意到了,遗憾。 - RemcoGerlich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接