You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数传参时解包数组列表并同步截取元素的方法

实现方案

问题背景

执行以下numpy代码:

import numpy as np

x = np.random.rand(100, 2)
rv_values, bins_values = np.histogramdd(x, bins=100, density=True)
meshed_coordinates = np.meshgrid(*bins_values)

返回的meshed_coordinates是包含2个维度为(101,101)数组的列表,结果符合预期:给np.histogramdd传入bins=100参数后,返回的bins_values列表包含2个长度为101的一维数组。
需要实现的需求为:调用np.meshgrid时,直接传入对bins_values中每个数组做[:-1]截取后的结果,不需要在函数调用外逐个手动截取数组,也不需要额外编写for循环遍历列表,同时要支持任意长度的bins_values列表。

具体写法

直接在解包传参时使用生成器表达式完成切片即可,不需要提前单独处理列表,代码如下:

meshed_coordinates = np.meshgrid(*(arr[:-1] for arr in bins_values))
  • 写法核心是用生成器表达式(arr[:-1] for arr in bins_values),解包时会自动遍历bins_values中的每一个数组,逐个完成[:-1]截取操作
  • 该写法对bins_values的长度没有限制,不管是2维、3维还是更高维度的直方图分箱结果,都可以自动适配
  • 不需要额外定义临时存储列表,也不需要在函数调用外写显式for循环,代码简洁,没有多余的内存开销

扩展提示:如果后续需要对每个分箱数组做其他统一处理,比如取分箱区间中点、加固定偏移等,只需要修改生成器表达式内的运算逻辑即可。例如要取每个分箱的中点生成网格,可以直接写为:

meshed_coordinates = np.meshgrid(*( (arr[:-1] + arr[1:])/2 for arr in bins_values ))

内容的提问来源于stack exchange,提问作者Barzi2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 03:39:31