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

Python中根据索引列表快速生成二进制数组的实现方法

Python根据索引列表生成对应二进制数组的高效方案

以下方案均适配你给出的示例:输入[3,4,7,9],输出[0,0,0,1,1,0,0,1,0,1],按实际场景的效率优先级排序:

1. Numpy向量化方案(大规模数据效率最高)

适合索引规模大、对性能要求高的场景,底层为C实现,运算速度远高于纯Python代码:

import numpy as np

indices = [3,4,7,9]
max_idx = max(indices)
# 初始化全0数组
res_arr = np.zeros(max_idx + 1, dtype=int)
# 对应索引位置批量设为1
res_arr[indices] = 1
# 如需转为普通Python列表,调用tolist()即可
res_list = res_arr.tolist()
  • 性能优势:十万级以上索引的场景下,速度是纯Python方案的几十到上百倍。

2. 纯Python列表推导方案(无第三方依赖,中小规模数据最优)

无需安装额外库,原生Python即可实现,中小数据量下性能足够、代码简洁:

indices = [3,4,7,9]
# 转成set保证in操作是O(1)复杂度
index_set = set(indices)
max_idx = max(indices)
res = [1 if i in index_set else 0 for i in range(max_idx + 1)]
  • 注意:不要直接用列表做in判断,列表的in操作是O(n)复杂度,数据量越大性能下降越明显。

3. 位运算极简方案(小数值索引场景适用)

如果索引数值整体偏小,可以用位运算快速生成,代码更精简:

indices = [3,4,7,9]
max_idx = max(indices)
# 位运算生成对应数值
num = sum(1 << i for i in indices)
# 转成二进制字符串后逐位转整数
res = [int(x) for x in f"{num:0{max_idx+1}b}"[::-1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:45:03