擅长:python、mysql、java
<p>这是另一种方法。我敢说这是相对清楚的,由于使用了集合,它应该是高效的,而且它只需要<code>O( len(A) + len(X) )</code>内存。在</p>
<p>甚至不需要<code>numpy</code>,但可以用于数组。在</p>
<pre><code>from collections import defaultdict
A = [400.5, 100, 700, 200, 15, 900]
B = [500.5, 200, 500, 600.5, 8, 999]
X = [400.5, 700, 100, 300, 15, 555, 900]
Y = [500.5, 500, 600.5, 100, 8, 555, 999]
def get_indices(values):
d = defaultdict(set)
for i, value in enumerate(values):
d[value].add(i)
return d
iA, iB, iX, iY = [get_indices(values) for values in [A, B, X, Y]]
print(iA)
# {400.5: {0}, 100: {1}, 200: {3}, 900: {5}, 700: {2}, 15: {4}}
print(iX)
# {400.5: {0}, 100: {2}, 300: {3}, 900: {6}, 555: {5}, 700: {1}, 15: {4}}
for i, (a, b) in enumerate(zip(A, B)):
common_indices = iX[a] & iY[b]
if common_indices:
print("A B : %d" % i)
print("X Y : %d" % common_indices.pop())
print()
# A B : 0
# X Y : 0
# A B : 2
# X Y : 1
# A B : 4
# X Y : 4
# A B : 5
# X Y : 6
</code></pre>