Assuming that the inputs are lists of 1D arrays, as indicated in the sample data presented in the question, it seems you can use broadcastingafter stacking the strings in the input lists, for example:
import numpy as np
s1 = np.row_stack((set1))
s2 = np.row_stack((set2))
s3 = np.row_stack((set3))
s4 = np.row_stack((set4))
sums = s4[None,None,None,:,:] + s3[None,None,:,None,:] + s2[None,:,None,None,:] + s1[:,None,None,None,:]
count = (sums.reshape(-1,s1.shape[1])==0).all(1).sum()
-
In [319]: set1 = [np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0])]
...: set2 = [np.array([-1, 0, 0]), np.array([-1, 1, 0])]
...: set3 = [np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0])]
...: set4 = [np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0]), np.array([0, 1, 0])]
...:
In [320]: count = 0
...: for b1 in set1:
...: for b2 in set2:
...: for b3 in set3:
...: for b4 in set4:
...: if all(b1 + b2 + b3 + b4 == 0):
...: count = count + 1
...:
In [321]: count
Out[321]: 3
In [322]: s1 = np.row_stack((set1))
...: s2 = np.row_stack((set2))
...: s3 = np.row_stack((set3))
...: s4 = np.row_stack((set4))
...:
...: sums = s4[None,None,None,:,:] + s3[None,None,:,None,:] + s2[None,:,None,None,:] + s1[:,None,None,None,:]
...: count2 = (sums.reshape(-1,s1.shape[1])==0).all(1).sum()
...:
In [323]: count2
Out[323]: 3