无法打破有限大小的列表

时间:2015-09-19 18:54:39

标签: python python-2.7

我有一个字母列表:

list1 = [abcdefghijk]

我有num = 3并希望在3的部分中打破list1,即:

[[abc], [def], [ghi], [jk]]

我的代码是:

for i in range(0, len(list1), num):
    chunks = [list1[i:i+num]]

输出错误:

chunks = ['k']

但我希望:

chunks = [[abc],[def],[ghi],[jk]]

我已经完成了所有可用的解决方案。但他们没有帮助。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

首先,您不需要将字符串放在列表中,因为它是可迭代的,如果是这样的话,您可以将其输出并输出变量中的字符串并使用来自itertools-recipes的python grouper函数用字符串对字符串进行分组,然后使用列表推导来加入它们:

from itertools import izip_longest
def grouper(iterable, n, fillvalue=''):
    args = [iter(iterable)] * n
    return izip_longest(*args, fillvalue=fillvalue)

[''.join(i) for i in grouper(list1,3)]

产生

['abc', 'def', 'ghi', 'jk']

注意:对于python 3,使用zip_longest代替

答案 1 :(得分:3)

>>> list2 = 'abcdefghijk'
>>> [list2[i:i+num] for i in range(0, len(list2), num)]
['abc', 'def', 'ghi', 'jk']

如何运作

i:i+num是一个切片:它从索引i开始选择并继续但不包括索引i+num。例如:

>>> list2[6 : 6+3]
'ghi'

我们想要每三个字符执行一次切片。要获取我们需要的i值,我们使用range函数:

>>> range(0, len(list2), num)
[0, 3, 6, 9]

现在,我们想要在range提供的每个索引处切片列表。因此:

>>> [ list2[i:i+num] for i in range(0, len(list2), num) ]
['abc', 'def', 'ghi', 'jk']

此表单称为列表理解

答案 2 :(得分:0)

list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
num = 3
chunks = []
for i in range(0,len(list1), num):
      chunks.append([list1[i:i+num]])
print chunks