这是我的代码,使用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")]
那我应该怎么做呢?
答案 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)]