在Python中获取集合的值

时间:2016-03-15 16:30:20

标签: python python-2.7 set counter multiple-conditions

我有6个数组,比方说a,b,c1,d1,c2,d2

数组a and b有一些共同的c1,c2d1,d2对。我找到了这些常见的对,即。那些a and b具有相同c1,d1c2,d2的{​​{1}}:

data_zcosmo_lastz = a
data_zphot_lastz = b
halo_id_zcosmo = c1 
halo_id_zphot = c2
idrep_zcosmo = d1
idrep_zphot = d2


file2freq1 = Counter(zip(c1,d1))
file2freq2 = Counter(zip(c2,d2))

set_a = set(file2freq1) & set(file2freq2) # common objects  

上述代码使set_a具有c1,d1c2,d2的常用值。

但如何获取a and b的{​​{1}}的值?

即。我希望set_a的{​​{1}}和a值。

示例

b

现在我想要set_a这些具有这些对的值。即

a = [1,2,3,4,5]
b = [2,3,4,5,6]
c1 = [1,1,1,2,2]
d1 = [3,3,3,4,4]
c2 = [1,1,2,2,2]
d2 = [3,3,1,4,4]

so set_a = [(1,3),(1,3),(2,4),(2,4)]

1 个答案:

答案 0 :(得分:1)

仍然不是100%你在问什么。根据我的理解,您希望ab的元素位于c1d1的元素与c2的元素相同的位置分别和d2

在这种情况下,使用setCounter将无济于事,因为这些将删除有关该位置的任何信息。相反,只需zip所有这些列表......

for a_, b_, c1_, d1_, c2_, d2_ in zip(a,b,c1,d1,c2,d2):
    if (c1_,d1_) == (c2_,d2_):
        print(a_, b_)

...或仅zip c1,d1,c2,d2列表并使用enumerate获取职位:

idx = [i for i, t in enumerate(zip(c1,d1,c2,d2)) if t[:2] == t[2:]]
print([(a[i], b[i]) for i in idx])

或者,在将数组转换为numpy之后,您也可以使用numpy.arraysA = np.array(a)等等。

>>> match = np.logical_and(C1 == C2, D1 == D2)
>>> match
array([ True,  True, False,  True,  True], dtype=bool)
>>> A[match]
array([1, 2, 4, 5])
>>> B[match]
array([2, 3, 5, 6])