如何创建一个大小为500的元组的分块列表,然后向其中添加数据?

时间:2015-07-26 15:27:05

标签: python

这是我的代码,使用Python 2.7

list1 = [1,2,3,4,5,6,9,10.....1000]

我试图像这样创建500个列表数据的块

chunk_data = [(1,2,3,4,5,...500),(501,502....1000)]

然后我要添加一个"数据"在每个块的末尾

所以它看起来像这样

[(1,2...500,'data'),(501,502...1000,'data')]

我尝试使用zip

it = iter(list1)    
chunked_data = zip(*[it]*500) 

但我无法附加"数据"现在

from itertools import repeat
chunked_data = zip(*[it]*500,repeat("data")) #Gives Error about adding arguments after unpacking function values !!

即使它能够正常工作,我也无法在下面编写此代码

chunked_data = zip(it,it,it...(500 times),repeat("data")]

那我应该怎么做呢?

5 个答案:

答案 0 :(得分:3)

您可以创建位置参数列表,然后将其解压缩:

args = [it] * 500 + [repeat('data')]
chunked_data = zip(*args)

这基本上是来自itertools文档的修改后的grouper recipe

效果很好:

In [17]: it = iter('0123456789')

In [18]: args = [it] * 5 + [repeat('data')]

In [19]: list(zip(*args))
Out[19]: [('0', '1', '2', '3', '4', 'data'), ('5', '6', '7', '8', '9', 'data')]

替代解决方案:

[tuple(list1[i:i+500]) + ('data',) for i in range(0, len(list1), 500)]

您可以在this页面找到更多信息。

答案 1 :(得分:2)

[tuple(list1[i:i+500]+['data']) for i in xrange(0, len(list1), 500)]

您可以更改500并将其扩展为任何块大小

答案 2 :(得分:1)

提供输出的功能

def chunks_with_data(l, n):
    return [tuple(l[i:i + n])+("data",) for i in range(0, len(l), n)]

>>>chunks_with_data(range(1000), 500)

答案 3 :(得分:-1)

但它可能会很长!!

base_lst = [x for x in range(1, 1001)]
lst = [tuple(base_lst[x:x+500]+['Data']) for x in range(500)]
print(lst)

答案 4 :(得分:-1)

以下是我对此问题的看法。它从列表中返回500个元素块([(1...500),(501...1000)])并附加data

l = [x for x in range(1, 1001)]
out_l = [tuple(l[i:i+500] + ['data']) for i in xrange(0, len(l), 500)]