如何将列表或字符串解析为固定长度的块

7 投票
4 回答
7498 浏览
提问于 2025-04-16 19:42

我现在遇到一个基本的问题,感觉很困惑。我想把一个只有一个元素的列表拆分成多个元素的列表,每个元素的字符长度为10。比如说,如果给我一个列表,内容是 ['111111111122222222223333333333'],那么我希望输出的结果是:

1111111111
2222222222
3333333333

我觉得这个问题应该很简单,但我就是想不出来。我尝试写了一个这样的函数:

def parser(nub):    
    while len(nub) > 10:  
        for subnub in nub:  
            subnub = nub[::10]
            return(subnub)  
    else:  
        print('Done')

显然,这个方法不行。有没有什么建议?用字符串会比用列表更简单吗?

4 个回答

1

虽然这个问题已经过去四年才被提问,但这里有另一种方法可以解决它,那就是使用textwrap模块。根据文档的说明:

textwrap.wrap(text[, width[, ...]])

这个函数可以把文本中的单段落(也就是一个字符串)进行换行处理,使得每一行的长度最多为指定的宽度。它会返回一个输出行的列表,最后不会再加换行符。

可选的关键字参数对应于TextWrapper的实例属性,具体说明在下面的文档中。默认的宽度是70个字符。

所以我们可以这样来使用它:

>>> import textwrap
>>> myList = ['111111111122222222223333333333']

>>> [i for text in myList for i in textwrap.wrap(text, 10)]
['1111111111', '2222222222', '3333333333']

>>> for i in [i for text in myList for i in textwrap.wrap(text, 10)]:
...     print i
1111111111
2222222222
3333333333
>>> 
1

使用:

value = '111111111122222222223333333333'
n = 10
(value[i:i+n] for i in xrange(0, len(value), n))
9

这里有一个相关的问题被提到过:

将一个列表切分成多个子列表

举个例子,如果你的源列表是:

the_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, ... ]

你可以这样把它切分:

split_list = [the_list[i:i+n] for i in range(0, len(the_list), n)]

假设 n 是你想要的子列表的长度,结果会是:

[[1, 2, 3, ..., n], [n+1, n+2, n+3, ..., 2n], ...]

然后你可以像这样遍历它:

for sub_list in split_list:
    # Do something to the sub_list

字符串也是一样的道理。

这里有一个实际的例子:

>>> n = 2
>>> listo = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> split_list = [listo[i:i+n] for i in range(0, len(listo), n)]
>>> split_list
[[1, 2], [3, 4], [5, 6], [7, 8], [9]]

>>> listo = '123456789'
>>> split_list = [listo[i:i+n] for i in range(0, len(listo), n)]
>>> split_list
['12', '34', '56', '78', '9']

撰写回答