返回相同索引中项目不同的位置总数的Python代码

返回相同索引中项目不同的位置总数的Python代码,python,arrays,python-2.7,python-3.x,numpy,Python,Arrays,Python 2.7,Python 3.x,Numpy,A=[1,2,3,4,5,6,7,8,9] B=[1,2,3,7,4,6,5,8,9] 我必须比较这两个列表,并使用一行python代码返回项目不同的位置数 例如: 对于给定的数组,输出应该是4,因为在索引(3,4,5,6)处,项是不同的。所以,程序应该返回4 我的方法是使用for循环比较每个位置: count=0 for i in range(0,len(A)): if(A[i]==B[i]): continue else: count+=1 print(cou

A=[1,2,3,4,5,6,7,8,9] B=[1,2,3,7,4,6,5,8,9]

我必须比较这两个列表,并使用一行python代码返回项目不同的位置数

例如: 对于给定的数组,输出应该是4,因为在索引(3,4,5,6)处,项是不同的。所以,程序应该返回4

我的方法是使用for循环比较每个位置:

count=0
for i in range(0,len(A)):
   if(A[i]==B[i]):
     continue
   else:
     count+=1
print(count)
请帮助我为此编写一行python代码

count = sum(a != b for a, b in zip(A, B))
print(count)
或者只
打印总和(a!=b代表a,b在zip中(a,b))

您可以查看一下,这些工具在python中非常强大和重要

您还可以检查其他人使用这些工具的方式

玩得开心

或者只
打印总和(a!=b代表a,b在zip中(a,b))

您可以查看一下,这些工具在python中非常强大和重要

您还可以检查其他人使用这些工具的方式

玩得开心

有很多方法可以做到这一点。如果您使用的是numpy,您可以使用:

请注意,
a!=b
返回一个数组,该数组包含true和false,具体取决于条件在每个索引处的计算方式

下面是一个速度比较:

>>> %timeit np.count_nonzero(a != b)
The slowest run took 40.59 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 752 ns per loop

>>> %timeit sum(i != j for i, j in zip(a, b))
The slowest run took 5.86 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 18.5 µs per loop
缓存掩盖了计时,但
40.59*0.752=30.52µs
,而
5.86*18.5=108.41µs
,因此numpy最慢的运行速度似乎仍然明显快于纯python最慢的运行速度

对于较大的阵列,这一点更加清晰:

>>> n = 10000
>>> a = np.arange(n)
>>> b = np.arange(n)
>>> k = 50
>>> ids = np.random.randint(0, n, k)
>>> a[ids] = 0
>>> ids = np.random.randint(0, n, k)
>>> b[ids] = 0
>>> %timeit np.count_nonzero(a != b)
The slowest run took 20.50 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 11.5 µs per loop
>>> %timeit sum(i != j for i, j in zip(a, b))
100 loops, best of 3: 15.6 ms per loop
差别要明显得多,numpy最多需要235微秒,而纯python平均需要15.6毫秒

有很多方法可以做到这一点。如果您使用的是numpy,您可以使用:

请注意,
a!=b
返回一个数组,该数组包含true和false,具体取决于条件在每个索引处的计算方式

下面是一个速度比较:

>>> %timeit np.count_nonzero(a != b)
The slowest run took 40.59 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 752 ns per loop

>>> %timeit sum(i != j for i, j in zip(a, b))
The slowest run took 5.86 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 18.5 µs per loop
缓存掩盖了计时,但
40.59*0.752=30.52µs
,而
5.86*18.5=108.41µs
,因此numpy最慢的运行速度似乎仍然明显快于纯python最慢的运行速度

对于较大的阵列,这一点更加清晰:

>>> n = 10000
>>> a = np.arange(n)
>>> b = np.arange(n)
>>> k = 50
>>> ids = np.random.randint(0, n, k)
>>> a[ids] = 0
>>> ids = np.random.randint(0, n, k)
>>> b[ids] = 0
>>> %timeit np.count_nonzero(a != b)
The slowest run took 20.50 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 11.5 µs per loop
>>> %timeit sum(i != j for i, j in zip(a, b))
100 loops, best of 3: 15.6 ms per loop

差别要明显得多,numpy最多需要235微秒,而纯python平均需要15.6毫秒

@StevenRumbalski应该是
a!=b
。更正:
总和(a!=b代表a,b在邮政编码中(a,b))
(谢谢@acw1668。)@StevenRumbalski应该是
a!=b
。更正:
总和(a!=b代表a,b在邮政编码中(a,b))
(谢谢@acw1668。)