在Python中获取集合的值

在Python中获取集合的值,python,python-2.7,set,counter,multiple-conditions,Python,Python 2.7,Set,Counter,Multiple Conditions,我有6个数组,比如说a、b、c1、d1、c2、d2 数组a和b有一些常见的c1、c2和d1、d2对。我发现这些公共对,即那些a和b具有相同的c1、d1和c2、d2如下: 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 =

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

数组
a和b
有一些常见的
c1、c2
d1、d2
对。我发现这些公共对,即那些
a和b
具有相同的
c1、d1
c2、d2
如下:

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、d1
c2、d2
的公共值


但是如何获取
集合a
a和b的值呢?

即,我需要
set\u a
a
b

范例

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和b的值。i、 e

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

仍然不是你要求的100%。我理解这个问题,您希望
a
b
的元素位于
c1
d1
的元素分别与
c2
d2
的元素相同的位置

在这种情况下,使用
设置
计数器
将不会有帮助,因为这将删除位置上的任何信息。取而代之的是,把所有这些列表放在一起

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

“但是我如何得到集合a的a和b的值呢?”你是什么意思?指数?你能给我举一个输入数组的最简单的例子吗?最后你想得到什么?@tobias_k:用一个例子编辑了这个问题。我希望这能让你更容易理解。我不仅需要索引,还需要属于此
集合的
a
b
的值。\u a
c1/d1和c2/d2的匹配对是否必须对齐,就像您的示例中那样?使用
设置
计数器
,您会丢失这些信息。实际上我刚刚意识到。。但是我想把它们整理好,就像例子中所说的那样。我如何做到这一点?