Python 基于其他数组的x个数切片numpy数组

Python 基于其他数组的x个数切片numpy数组,python,arrays,numpy,slice,Python,Arrays,Numpy,Slice,我正在努力使我当前的代码动态化。这意味着无论用户的阵列输入数量如何,它都应该能够进行调整 当前代码: main1 = numpy.array([1,2,3,4]) array1 = numpy.array(['a','b','c','b']) my_list1 = ['a','b'] array2 = numpy.array(['cat','dog','bird','cat']) my_list2 = ['cat'] result_array = main1[np.in1d(array1, m

我正在努力使我当前的代码动态化。这意味着无论用户的阵列输入数量如何,它都应该能够进行调整

当前代码:

main1 = numpy.array([1,2,3,4])
array1 = numpy.array(['a','b','c','b'])
my_list1 = ['a','b']
array2 = numpy.array(['cat','dog','bird','cat'])
my_list2 = ['cat']

result_array = main1[np.in1d(array1, my_list1) and np.in1d(array2, my_list2)]
打印出
result\u array
的理想结果是:

array([1, 4])
这是因为
a
cat&b
cat
的交叉点

我的目标是能够使用n个
array1
array2
。。。和n个
我的列表1
我的列表2


提前谢谢

两个以上阵列的版本,使用
逻辑\u和.reduce

array3 = numpy.array(['cat3','dog3','bird3','cat3'])
my_list3 = ['cat3']

my_arrays = [array1, array2, array3]
my_lists = [my_list1, my_list2, my_list3]
res1 = main1[numpy.logical_and.reduce(tuple(np.in1d(array, lst) for 
                                            array, lst in zip(my_arrays, my_lists)))]
测试它:

res2 = main1[np.in1d(array1, my_list1) & np.in1d(array2, my_list2) &
             np.in1d(array3, my_list3)]
看起来不错:

>>> np.all(res1 == res2)
True
旧答案只有两个数组

这应该起作用:

my_arrays = [array1, array2]
my_lists = [my_list1, my_list2]
main1[np.logical_and(*(np.in1d(array, lst) for array, lst in zip(my_arrays, my_lists)))]
结果:

array([1, 4])

很好用!谢谢!你好我认为它使用三个数组和三个列表,但显然它最多只考虑第二对数组列表。我们如何使NP-逻辑和考虑超过2个参数?