获取 Python 中集合的值

Getting values OF a set in Python

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

数组 a and b 有一些常见的 c1,c2d1,d2 对。我发现这些常见的对,即那些具有相同 c1,d1c2,d2a and b 像这样:

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 的公共值。

但是如何获取 set_aa and b 的值?

即我想要 set_aab 值。

示例

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)]

现在我想要 a and b 的那些值有这些对。即

a = [1,2,4,5] and b = [2,3,5,6]

仍未 100% 满足您的要求。据我了解这个问题,您希望 ab 的元素位于 c1d1 的元素与 [=17= 的元素相同的位置] 和 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.arrays 之后,您也可以为此使用 numpy,例如A = 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])