首页 > 解决方案 > 如何通过平均分配给定数量来创建 N 个大小列表?

问题描述

例如,如果给定的数字是12,我想要4列表,每个列表的大小为3

同样,如果数字是:

列表的数量是固定的。

标签: pythonpython-3.xlist

解决方案


您可以编写一个列表理解range()获得您想要的列表:

group = 4       # Number of groups in which you want to distribute the number
num  = 14       # Your number (to distribute)
default = None  # Default value you want to insert into your lists

my_list = [[None for _ in range((num//group) + ((num%group)>=g))] for g in range(group, 0, -1)]

这将返回my_list为:

[

    [None, None, None], 
    [None, None, None], 
    [None, None, None, None], 
    [None, None, None, None]
]

最好编写一个自定义函数来获取所需列表的大小:

def get_list_sizes(num, group):
    return [(num//group) + (num%group>=g) for g in range(group, 0, -1)]

# OR, a generator:
# def get_list_sizes(num, group):
#     for g in range(group, 0, -1):
#         yield num//group + (num%group>=g)

然后在嵌套列表理解中迭代上述函数返回的大小以获得所需的列表。示例测试运行:

group, num, default = 4, 14, None
my_list = [[default for _ in range(n)] for n in get_list_sizes(num, group)]
# [[None, None, None], [None, None, None], [None, None, None, None], [None, None, None, None]]

group, num, default = 5, 13, None
my_list = [[default for _ in range(n)] for n in get_list_sizes(num, group)]
# [[None, None], [None, None], [None, None, None], [None, None, None], [None, None, None]]

您可以使用以下方式进一步简化它itertools.repeat()

from itertools import repeat
group, num, default = 5, 13, None

my_list = [list(repeat(default, n)) for n in get_list_sizes(num, group)]
# [[None, None], [None, None], [None, None, None], [None, None, None], [None, None, None]]

推荐阅读