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

列表里面保存的是什么?

直接用方括号切片,如果我没记错的话,是一定会产生一个新的 copy 的。。。。。。

回到顶部