从lis拆分数据

2024-09-27 07:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个数据集,我试图把数据分成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个(不一定)相等的组?我需要写一些灵活的东西,因为我想同样的代码工作在其他数据集,可能有更多或更少的数据点。你知道吗


Tags: 数据函数代码列表defgrouplistlist2
2条回答

这是因为IDList列表的长度不能被4整除,在newlist中只留下3个项的子列表,并且当zip子列表时,当任何一个输入迭代器用完时,压缩停止,结果只剩下3个列表而不是4个列表。您可以将zip替换为itertools.izip_longest(在导入itertools之后),以便输出与预期一样。你知道吗

使用索引切片可以简化这个问题。你知道吗

如果要创建大小大致相等的n列表,可以执行以下操作:

def split_list(input_list, n):
    output_lists = [input_list[i::n] for i in range(n)]
    return output_lists

这将在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输出列表中,保留原始顺序,可以执行以下操作:

import math

def split_list(input_list, n):
    group_size = int(math.ceil(len(input_list)/float(n)))
    output_lists = [input_list[group_size*i:min((i+1)*group_size, len(input_list))] for i in range(n)]
    return output_lists

使用与上面相同的示例,这将返回[[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14]]。你知道吗

相关问题 更多 >

    热门问题