Python中如何根据百分比将列表切成若干个子列表
有个 200 万左右量的 list。
这个数量级。虽然我知道不该用 list。
但。。。继续主题。有啥优雅点方法没。
非要自己算百分比然后冒号去切片么?
python 有啥黑科技。是根据百分比自动切 list 的
Python中如何根据百分比将列表切成若干个子列表
8 回复
不是根据百分比计算下标,然后根据下标取数据么
def split_list_by_percentage(lst, percentages):
"""
根据百分比将列表分割成若干个子列表
参数:
lst: 要分割的原始列表
percentages: 百分比列表,总和应为100
返回:
分割后的子列表列表
"""
if not lst:
return []
if abs(sum(percentages) - 100) > 1e-10:
raise ValueError("百分比总和必须为100")
n = len(lst)
result = []
start = 0
for p in percentages:
# 计算当前百分比对应的元素数量
count = int(round(n * p / 100))
# 确保不会超出列表范围
count = min(count, n - start)
result.append(lst[start:start + count])
start += count
return result
# 使用示例
if __name__ == "__main__":
# 示例1: 均匀分割
data = list(range(100))
percentages = [25, 25, 25, 25]
result = split_list_by_percentage(data, percentages)
print(f"原始列表长度: {len(data)}")
print(f"分割百分比: {percentages}")
for i, sublist in enumerate(result):
print(f"子列表{i+1}: 长度={len(sublist)}, 内容={sublist[:5]}...")
# 示例2: 不均匀分割
print("\n--- 不均匀分割示例 ---")
data2 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
percentages2 = [30, 20, 50]
result2 = split_list_by_percentage(data2, percentages2)
for i, sublist in enumerate(result2):
print(f"子列表{i+1}: {sublist}")
# 示例3: 处理边界情况
print("\n--- 边界情况示例 ---")
data3 = [1, 2, 3]
percentages3 = [60, 40]
result3 = split_list_by_percentage(data3, percentages3)
print(f"短列表分割结果: {result3}")
这个函数的核心思路是:先计算每个百分比对应的元素数量,然后按顺序切片。注意处理四舍五入和边界情况,确保不会超出列表范围。函数会验证百分比总和是否为100,并处理空列表的情况。
总结建议:用这个函数可以灵活地按任意比例分割列表。
不要真切了吧。。太慢了。计算每个分段的起点终点吧
再黑的科技。。最终落到实处也是要计算百分比落脚的 int 值
最好的办法是写一个 proxy list 根据冒号生成 offset 访问的 时候 index = offset+index
沒有, 應該用 itertools islice
列表里面保存的是什么?


