在python中检查两个数组中的反向对重复
我有两个数组,如下所示:在python中检查两个数组中的反向对重复,python,arrays,python-2.7,Python,Arrays,Python 2.7,我有两个数组,如下所示: a = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5] b = [1, 2, 5, 1, 3, 2, 3, 4, 3, 5, 1, 4] 这两个数组可以形成的所有可能的对是(a[0],b[0]),(a[1],b[1]),(a[2],b[2]),(a[3],b[3]),…,(a[11],b[11])。这两个数组具有相同的长度,并且在相同的索引之间形成一对。 问题是要检查有多少对存在反向对。 例如,在我上面提供的数组中,对(a[1],b[1])和
a = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5]
b = [1, 2, 5, 1, 3, 2, 3, 4, 3, 5, 1, 4]
这两个数组可以形成的所有可能的对是(a[0],b[0]),(a[1],b[1]),(a[2],b[2]),(a[3],b[3]),…,(a[11],b[11])
。这两个数组具有相同的长度,并且在相同的索引之间形成一对。
问题是要检查有多少对存在反向对。
例如,在我上面提供的数组中,对(a[1],b[1])
和(a[3],b[3])
形成一个反向对,因为(1,2)
和(2,1)
彼此反向。类似地,(a[2],b[2])
与(a[10],b[10])
形成反向对。有人能告诉我如何计算两个阵列之间存在的反向对的总数吗?
非常感谢您抽出时间 这是一个相当模糊的问题。 如果存在单个反向对,是否要计数
+1
,或者如果在数组中找到(a[i],b[i])
的n个反向,是否要计数+n
?
一次只计算反向对怎么样?
(1,1)
是否应算作反向对
对于将来,可能会显示您对简单测试系统的期望答案
我希望您的测试系统应该给出n=12
反向对,假设您在计算中只计算了一次反向对
这只是一个易于阅读的简单实现:
A = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5]
B = [1, 2, 5, 1, 3, 2, 3, 4, 3, 5, 1, 4]
n = 0
pairs = [pair for pair in zip(A, B)]
for rev_pair in zip(B, A):
if rev_pair in pairs:
n += 1
我相信可以更快地实施
A = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5]
B = [1, 2, 5, 1, 3, 2, 3, 4, 3, 5, 1, 4]
for pair in zip(A,B):
rpair = pair[::-1]
print(pair,rpair)
结果:
(1, 1) (1, 1)
(1, 2) (2, 1)
(1, 5) (5, 1)
(2, 1) (1, 2)
(2, 3) (3, 2)
(3, 2) (2, 3)
(3, 3) (3, 3)
(3, 4) (4, 3)
(4, 3) (3, 4)
(4, 5) (5, 4)
(5, 1) (1, 5)
(5, 4) (4, 5)
A = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5]
B = [1, 2, 5, 1, 3, 2, 3, 4, 3, 5, 1, 4]
for pair in zip(A,B):
rpair = pair[::-1]
if pair[0] == rpair[1] and pair[1] == rpair[0]:
print(pair,rev_pair)
结果
(1, 1) (4, 5)
(1, 2) (4, 5)
(1, 5) (4, 5)
(2, 1) (4, 5)
(2, 3) (4, 5)
(3, 2) (4, 5)
(3, 3) (4, 5)
(3, 4) (4, 5)
(4, 3) (4, 5)
(4, 5) (4, 5)
(5, 1) (4, 5)
(5, 4) (4, 5)
total pairs : 12
决赛
A = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5]
B = [1, 2, 5, 1, 3, 2, 3, 4, 3, 5, 1, 4]
n = 0
for pair in zip(A,B):
rpair = pair[::-1]
if pair[0] == rpair[1] and pair[1] == rpair[0]:
n = n + 1
print('total pairs : {}'.format(n))
结果
(1, 1) (4, 5)
(1, 2) (4, 5)
(1, 5) (4, 5)
(2, 1) (4, 5)
(2, 3) (4, 5)
(3, 2) (4, 5)
(3, 3) (4, 5)
(3, 4) (4, 5)
(4, 3) (4, 5)
(4, 5) (4, 5)
(5, 1) (4, 5)
(5, 4) (4, 5)
total pairs : 12
请提供您尝试过的内容以及它是如何出错的。我想不出逻辑。我不是要代码,只是给我一个逻辑。非常感谢。zip(a,b)为您提供了所有对,因此,也许可以将zip(a,b)与zip(b,a)进行比较?好的,您可以制作一对反向的原始对,添加到原始对列表中,如果您有重复项,请计数。这不是最有效的方法,但至少应该给你一个开始的机会。zip是我一直在寻找的函数。我不知道如何在每个元素上编写一个包含多个值的数组。您可以将
zip(A,B)
提取到外部的变量中,因为当前这是多次调用的。