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

如何使用NumPy求Python中列表内所有数组的交集?

解决多个NumPy数组的交集问题

要获取列表中所有数组的交集,np.intersect1d仅支持两个数组的计算,所以需要通过迭代累积的方式处理多个数组,以下是两种可行方案:

方案1:使用functools.reduce简化迭代

reduce可以将二元函数(这里是np.intersect1d)依次应用到列表的所有元素上,逐步累积得到最终交集:

import numpy as np
from functools import reduce

array0 = [0,1,2,3,4,5,6]
array1 = [0,2,3,5,6,7,8,9,10]
array2 = [4,5,6]
array3 = [5,6,7,8,9,10,11,12,13]

array_list = [array0, array1, array2, array3]

# 计算所有数组的交集
intersection = reduce(np.intersect1d, array_list)
print(intersection)  # 输出: [5 6]

方案2:手动循环迭代(更直观)

如果不想引入reduce,可以手动初始化交集为第一个数组,再逐个与后续数组求交集:

import numpy as np

array0 = [0,1,2,3,4,5,6]
array1 = [0,2,3,5,6,7,8,9,10]
array2 = [4,5,6]
array3 = [5,6,7,8,9,10,11,12,13]

array_list = [array0, array1, array2, array3]

# 初始化交集为第一个数组
intersection = np.array(array_list[0])
# 遍历剩余数组,逐步求交集
for arr in array_list[1:]:
    intersection = np.intersect1d(intersection, arr)

print(intersection)  # 输出: [5 6]

你的尝试出错原因

  • np.intersect1d([arraylist[x] for x in ...]):该写法把所有数组打包成一个列表传给函数,但np.intersect1d要求两个独立的数组参数,而非一个包含多个数组的列表。
  • list(filter(lambda x:x in [x for x in arraylist])):filter的第二个参数需要是待筛选的元素集合,你的写法未提供要筛选的元素源,且逻辑上未遍历所有数组完成交集判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:20:00