Cách nhanh nhất để mở rộng mặt trước của mảng trong python là gì? Giả sử tôi có 2 mảng: a và b. Tôi muốn tạo ra cách nhanh nhất của a = b + a (b không nên thay đổi).Danh sách trước python nhanh mở rộng
benchamarks nhỏ của tôi:
thử nghiệm 1:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
a=a+b
import cProfile
cProfile.run('f(a,b)')
thời gian: ~ 12 s
thử nghiệm 2:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
a[0:0] = b
import cProfile
cProfile.run('f(a,b)')
thời gian: ~ 1.5 giây
test3:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
lenb = len(b)
def f(a,b):
for i in range(0,100):
b.extend(a)
# do something with b
b = b[:lenb]
import cProfile
cProfile.run('f(a,b)')
thời gian: ~ 0.4s
Nhưng tôi nghĩ rằng nó sẽ nhanh hơn, bởi vì danh sách nối nên được thực hiện như thay đổi vài gợi ý cơ bản. Và đoạn mã sau là nhanh nhất, nhưng thay đổi b, không phải là một (SO CNTT là không tốt cho MỤC ĐÍCH CỦA CHÚNG TÔI): test "sai":
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
b.extend(a)
import cProfile
cProfile.run('f(a,b)')
thời gian: ~ 0.13s
Vì vậy, về mặt lý thuyết nên có một cách để mở rộng trước một thời gian thử nghiệm "WRONG".
'từ bộ sưu tập im port deque' – eumiro
Lưu ý, những gì bạn có là danh sách, không phải mảng. –