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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:35