<p>如前所述,<a href="https://stackoverflow.com/questions/993984/why-numpy-instead-of-python-lists">here</a>numpy数组比python列表快得多。这就是为什么numpy数组看起来更快,因为在调用<code>list()</code>函数时仍然使用numpy数组。在</p>
<p>使用numpy<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tolist.html" rel="nofollow noreferrer">^{<cd2>}</a>函数将numpy数组完全转换为常规Python对象(如user2357112所指出),性能差异将消失,请参见:</p>
<pre><code>import timeit
import numpy as np
def func(a, b):
return [_ for _ in a if _ not in b]
Na, Nb = 10000, 5000
b = list(np.random.randint(Na, size=Nb)) # len: 5000, max: 9999
# Ordered list of Na integers
a1 = [_ for _ in range(Na)] # len: 10000, max: 9999
# Random list of Na integers
a2 = np.random.randint(Na, size=Na).tolist() # len: 10000, max: 9999
# Ordered list of Na integers generated with numpy
a3 = np.arange(Na).tolist()
start_time = timeit.default_timer()
ab1 = func(a1, b)
abt1 = timeit.default_timer() - start_time
print("Time ab1", abt1)
start_time = timeit.default_timer()
ab2 = func(a2, b)
abt2 = timeit.default_timer() - start_time
print("Time ab2", abt2)
start_time = timeit.default_timer()
ab3 = func(a3, b)
abt3 = timeit.default_timer() - start_time
print("Time ab3", abt3)
print("Ratio 1/2:", abt1 / abt2)
print("Ratio 1/3:", abt1 / abt3)
#Time ab1 4.622085004015502
#Time ab2 4.598610720638726
#Time ab3 4.63976530848255
#Ratio 1/2: 1.005104646773301
#Ratio 1/3: 0.9961893968139456
</code></pre>
<p>希望这能回答你的第一个问题!在</p>