获取 Python 中集合的值
Getting values OF a set in Python
我有 6 个数组,比方说 a,b,c1,d1,c2,d2
。
数组 a and b
有一些常见的 c1,c2
和 d1,d2
对。我发现这些常见的对,即那些具有相同 c1,d1
和 c2,d2
的 a 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,d1
和 c2,d2
的公共值。
但是如何获取 set_a
的 a and b
的值?
即我想要 set_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 and b
的那些值有这些对。即
a = [1,2,4,5] and b = [2,3,5,6]
仍未 100% 满足您的要求。据我了解这个问题,您希望 a
和 b
的元素位于 c1
和 d1
的元素与 [=17= 的元素相同的位置] 和 d2
分别。
在这种情况下,使用 set
和 Counter
将无济于事,因为它们会删除该职位的所有信息。相反,只是 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])
我有 6 个数组,比方说 a,b,c1,d1,c2,d2
。
数组 a and b
有一些常见的 c1,c2
和 d1,d2
对。我发现这些常见的对,即那些具有相同 c1,d1
和 c2,d2
的 a 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,d1
和 c2,d2
的公共值。
但是如何获取 set_a
的 a and b
的值?
即我想要 set_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 and b
的那些值有这些对。即
a = [1,2,4,5] and b = [2,3,5,6]
仍未 100% 满足您的要求。据我了解这个问题,您希望 a
和 b
的元素位于 c1
和 d1
的元素与 [=17= 的元素相同的位置] 和 d2
分别。
在这种情况下,使用 set
和 Counter
将无济于事,因为它们会删除该职位的所有信息。相反,只是 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])