我有一个字母列表:
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]]
我已经完成了所有可用的解决方案。但他们没有帮助。我该如何解决这个问题?
答案 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