Python中对多个等长列表同索引位置元素按列求和实现问询
Python实现多个等长列表按索引同位置(按列)求和方案
第一步:修正原始生成代码,存储生成的数组
你原来的代码仅打印了每轮的抛硬币结果,没有存储到容器中,先调整生成函数:
import numpy as np import random as rnd result = [0,1] # 0代表反面,1代表正面 probability = [1/2,1/2] N = 10 # 每轮抛硬币次数 all_rounds = [] # 存储所有轮次的抛硬币结果 def list_generator(number): # number为轮次数量,本例中为5 for i in range(number): n_round = np.array(rnd.choices(result, probability, k=N)) print(n_round) all_rounds.append(n_round) # 将每轮结果追加到存储列表中 list_generator(5)
运行后你示例的输出会被全部存入all_rounds列表,结构为5个长度为10的数组组成的集合。
第二步:按列求和的两种实现方式
方案1:使用numpy实现(推荐,适配后续绘图场景)
numpy内置按轴求和功能,直接堆叠数组后指定按行方向(轴0)求和,即可得到按列求和结果:
# 将所有轮次的数组合并为二维数组,shape为(5,10) rounds_matrix = np.array(all_rounds) # 按轴0求和(即每一列的所有元素相加),得到长度为10的求和结果数组 col_sum = rounds_matrix.sum(axis=0) print(col_sum)
你给出的示例输入运行后会得到结果:[2 3 1 2 1 3 2 3 3 3],完全符合你要求的计算逻辑。如果需要转成普通Python列表,加一行col_sum = col_sum.tolist()即可。
方案2:纯Python实现(无numpy依赖)
如果不想引入numpy依赖,用内置的zip函数可以直接打包所有列表的同索引元素,逐组求和即可:
# 先将numpy数组转成普通列表再打包,逐组求和 col_sum = [sum(col) for col in zip(*[arr.tolist() for arr in all_rounds])] print(col_sum)
后续使用说明
得到的col_sum可以直接传给matplotlib等绘图库做可视化,不需要额外格式转换。
内容的提问来源于stack exchange,提问作者F08
相关产品推荐
相关产品推荐

