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
相关产品推荐
相关产品推荐

