python - 如何通过平均分配给定数量来创建 N 个大小列表?
问题描述
例如,如果给定的数字是12
,我想要4
列表,每个列表的大小为3
。
同样,如果数字是:
13
,列表的大小为3,3,3,4
14
,尺寸将为3,3,4,4
,依此类推。
列表的数量是固定的。
解决方案
您可以编写一个列表理解来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]]
推荐阅读
- node.js - 无需模块导出即可访问的 JSON 文件
- cassandra-2.0 - 如何检查 Cassandra 表未访问多长时间
- ios - 如何从 SwiftUI 中的图形样式 DatePicker 中删除侧边距?
- r - 最后使用 plotly() 时隐藏 scale_color_manual() 中的特定图例
- c++ - 使用 rdkafkacpp.h 的 C++ 中的基本 Kafka Consumer
- avfoundation - 在 iOS 上安排音频样本播放
- sequelize.js - 为什么 Sequelize 会创建一个名为“文本”的数据库列,而不是以模型属性命名
- assembly - 将索引寄存器分配给通用寄存器
- python - 使用numpy时相应地迭代2个数组的最佳方法是什么?
- css - 如何制作灵活的网格 css/react