所以我有一个数据集,我试图把数据分成4个列表。我写这个函数就是为了做到这一点。你知道吗
def __spit_list_into_group(self, IDList, n, list1, list2, list3, list4):
newlist = [IDList[i:i + n] for i in xrange(0, len(IDList), n)]
list1, list2, list3, list4 = map(list, zip(*newlist))
return list1, list2, list3, list4
但是,当我将n
设置为4时,代码只能将数据拆分为3个列表,当我将n
设置为5时,代码将数据拆分为5个列表。为什么代码不把数据分成4个部分,我怎样才能让它把数据分成4个部分呢?你知道吗
编辑:我意识到这个数据集有15个数据点,这就是为什么我只能把它分成3和5。如何将数据分成4个(不一定)相等的组?我需要写一些灵活的东西,因为我想同样的代码工作在其他数据集,可能有更多或更少的数据点。你知道吗
这是因为
IDList
列表的长度不能被4
整除,在newlist
中只留下3个项的子列表,并且当zip
子列表时,当任何一个输入迭代器用完时,压缩停止,结果只剩下3个列表而不是4个列表。您可以将zip
替换为itertools.izip_longest
(在导入itertools
之后),以便输出与预期一样。你知道吗使用索引切片可以简化这个问题。你知道吗
如果要创建大小大致相等的
n
列表,可以执行以下操作:这将在
n
的跳转中逐步遍历输入列表,以给出所需数量的输出列表。你知道吗例如,假设您的输入列表是
range(15)
或[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
,您需要n=4
列表。 这将返回[[0,4,8,12],[1,5,9,13],[2,6,10,14],[3,7,11]]
。你知道吗或者,如果要将输入列表分组到
n
输出列表中,保留原始顺序,可以执行以下操作:使用与上面相同的示例,这将返回
[[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14]]
。你知道吗相关问题 更多 >
编程相关推荐