Python中从另一数组创建子数组及元素对应统计问题
嘿,这两个数组操作的问题其实挺典型的,我给你分享两种常用的解决思路,用Python来举例会更清楚~
问题I:统计数组a中各元素对应b中0/1/2的出现次数
这里有两种常用方法,看你更倾向于基础实现还是用工具库简化:
方法1:手动遍历统计(基础版)
先把你的数组转换成可迭代的列表(假设你用的是Python):
a = ['c', 'b', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'a', 'c', 'b'] b = [0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 1, 0, 1]
然后用字典来存储每个字符对应的数字计数:
counts = {} # 遍历每一对a和b的元素 for char, num in zip(a, b): # 如果当前字符还没在统计字典里,初始化它的0/1/2计数 if char not in counts: counts[char] = {0: 0, 1: 0, 2: 0} # 对应数字的计数+1 counts[char][num] += 1 # 打印结果 for char, num_counts in counts.items(): print(f"字符 '{char}' 对应的数字次数:{num_counts}")
运行后就能得到每个字符对应0、1、2的具体次数,比如'c'对应的是{0:4, 1:0, 2:0}这样的结果。
方法2:用Pandas快速生成交叉表(简便版)
如果你熟悉Pandas库,一行代码就能搞定,非常高效:
import pandas as pd # 转换成Series ser_a = pd.Series(a) ser_b = pd.Series(b) # 生成交叉表,直接得到统计结果 cross_table = pd.crosstab(ser_a, ser_b) print(cross_table)
输出会是一个表格,行是a中的字符,列是b中的数字,单元格就是对应的次数,一目了然。
问题II:提取a中元素为'c'的子数组c和d
同样有两种简单的实现方式:
方法1:列表推导式(基础版)
直接用列表推导式筛选符合条件的元素:
# 只保留a中为'c'的元素到c,对应的b元素到d c = [char for char, num in zip(a, b) if char == 'c'] d = [num for char, num in zip(a, b) if char == 'c'] print(f"子数组c:{c}") print(f"子数组d:{d}")
方法2:Numpy数组切片(适合大数据量)
如果你的数组是Numpy格式的,用掩码切片会更高效:
import numpy as np # 转换成Numpy数组 a_np = np.array(a) b_np = np.array(b) # 创建掩码:a中等于'c'的位置标记为True mask = a_np == 'c' # 用掩码提取子数组 c = a_np[mask] d = b_np[mask] print(f"子数组c:{c}") print(f"子数组d:{d}")
这样就能快速得到只包含'c'对应元素的子数组啦。
内容的提问来源于stack exchange,提问作者jig
相关产品推荐
相关产品推荐

