Một sự hiểu biết sâu sắc về danh sách Python là nền tảng cho giáo dục Python của bạn. Hôm nay, tôi tự hỏi: Điều gì khác biệt giữa hai phương pháp danh sách được sử dụng thông thường nhất: append[]
so với extend[]
?
Tôi đã quay một video nhỏ giải thích sự khác biệt và phương pháp nào nhanh hơn bạn có thể chơi nó khi bạn đọc qua hướng dẫn này:
Danh sách python append [] vs extend [] - sự khác biệt về ngữ nghĩa và tốc độ
Ở đây, câu trả lời ngắn gọn - append[]
so với extend[]
:
- Phương thức
list.append[x]
thêm phần tửx
vào cuốilist
. - Phương pháp
list.extend[iter]
thêm tất cả các yếu tố trongimport time def list_by_append[n]: '''Creates a list & appends n elements''' lst = [] for i in range[n]: lst.append[n] return lst def list_by_extend[n]: '''Creates a list & extends it with n elements''' lst = [] lst.extend[range[n]] return lst # Compare runtime of both methods list_sizes = [i * 10000 for i in range[100]] append_runtimes = [] extend_runtimes = [] for size in list_sizes: # Get time stamps time_0 = time.time[] list_by_append[size] time_1 = time.time[] list_by_extend[size] time_2 = time.time[] # Calculate runtimes append_runtimes.append[[size, time_1 - time_0]] extend_runtimes.append[[size, time_2 - time_1]] # Plot everything import matplotlib.pyplot as plt import numpy as np append_runtimes = np.array[append_runtimes] extend_runtimes = np.array[extend_runtimes] print[append_runtimes] print[extend_runtimes] plt.plot[append_runtimes[:,0], append_runtimes[:,1], label='append[]'] plt.plot[extend_runtimes[:,0], extend_runtimes[:,1], label='extend[]'] plt.xlabel['list size'] plt.ylabel['runtime [seconds]'] plt.legend[] plt.savefig['append_vs_extend.jpg'] plt.show[]
0 vào cuốilist
.
Sự khác biệt giữa append[]
và extend[]
là phần trước chỉ thêm một yếu tố và phần sau thêm một bộ sưu tập các phần tử vào danh sách.
Bạn có thể thấy điều này trong ví dụ sau:
>>> l = [] >>> l.append[1] >>> l.append[2] >>> l [1, 2] >>> l.extend[[3, 4, 5]] >>> l [1, 2, 3, 4, 5]
Trong mã, trước tiên bạn thêm các phần tử số nguyên 1 và 2 vào danh sách bằng hai cuộc gọi vào phương thức append[]
. [Nếu bạn cần hiểu sâu hơn, hãy xem bài viết chi tiết của tôi về phương thức append [] trên blog này.]
Sau đó, bạn sử dụng phương thức mở rộng để thêm ba phần tử 3, 4 và 5 trong một cuộc gọi của phương thức extend[]
.
Những bài viết liên quan:
- Hướng dẫn cuối cùng về danh sách Python
Tại đây, bảng gian lận PDF miễn phí của bạn cho bạn thấy tất cả các phương thức danh sách Python trên một trang đơn giản. Nhấp vào hình ảnh để tải xuống tệp PDF có độ phân giải cao, in nó và đăng nó lên tường văn phòng của bạn:
Phương thức nào nhanh hơn - extend [] hoặc append []?
Để trả lời câu hỏi này, tôi đã viết một kịch bản ngắn kiểm tra hiệu suất thời gian chạy của việc tạo danh sách lớn các kích thước tăng bằng các phương thức extend[]
và append[]
.
Luận án của tôi là phương thức extend[]
phải nhanh hơn cho các kích thước danh sách lớn hơn vì Python có thể nối các phần tử vào danh sách trong một lô thay vì gọi cùng một phương thức.
Tôi đã sử dụng sổ ghi chép của mình với bộ xử lý Intel [R] Core [TM] I7-8565U 1.8GHz [với Turbo tăng lên tới 4,6 GHz] và RAM 8 GB.
Sau đó, tôi đã tạo 100 danh sách với cả hai phương thức, mở rộng [] và append [], với kích thước từ 10.000 yếu tố đến 1.000.000 yếu tố. Là các phần tử, tôi chỉ cần tăng số nguyên số lượng bắt đầu từ 0.
Ở đây, mã mà tôi đã sử dụng để đo và vẽ kết quả: phương thức nào nhanh hơn, tính năng [] hoặc extend []?
import time def list_by_append[n]: '''Creates a list & appends n elements''' lst = [] for i in range[n]: lst.append[n] return lst def list_by_extend[n]: '''Creates a list & extends it with n elements''' lst = [] lst.extend[range[n]] return lst # Compare runtime of both methods list_sizes = [i * 10000 for i in range[100]] append_runtimes = [] extend_runtimes = [] for size in list_sizes: # Get time stamps time_0 = time.time[] list_by_append[size] time_1 = time.time[] list_by_extend[size] time_2 = time.time[] # Calculate runtimes append_runtimes.append[[size, time_1 - time_0]] extend_runtimes.append[[size, time_2 - time_1]] # Plot everything import matplotlib.pyplot as plt import numpy as np append_runtimes = np.array[append_runtimes] extend_runtimes = np.array[extend_runtimes] print[append_runtimes] print[extend_runtimes] plt.plot[append_runtimes[:,0], append_runtimes[:,1], label='append[]'] plt.plot[extend_runtimes[:,0], extend_runtimes[:,1], label='extend[]'] plt.xlabel['list size'] plt.ylabel['runtime [seconds]'] plt.legend[] plt.savefig['append_vs_extend.jpg'] plt.show[]
Mã này bao gồm ba phần cấp cao:
- Trong phần đầu tiên, bạn xác định hai hàm
import time def list_by_append[n]: '''Creates a list & appends n elements''' lst = [] for i in range[n]: lst.append[n] return lst def list_by_extend[n]: '''Creates a list & extends it with n elements''' lst = [] lst.extend[range[n]] return lst # Compare runtime of both methods list_sizes = [i * 10000 for i in range[100]] append_runtimes = [] extend_runtimes = [] for size in list_sizes: # Get time stamps time_0 = time.time[] list_by_append[size] time_1 = time.time[] list_by_extend[size] time_2 = time.time[] # Calculate runtimes append_runtimes.append[[size, time_1 - time_0]] extend_runtimes.append[[size, time_2 - time_1]] # Plot everything import matplotlib.pyplot as plt import numpy as np append_runtimes = np.array[append_runtimes] extend_runtimes = np.array[extend_runtimes] print[append_runtimes] print[extend_runtimes] plt.plot[append_runtimes[:,0], append_runtimes[:,1], label='append[]'] plt.plot[extend_runtimes[:,0], extend_runtimes[:,1], label='extend[]'] plt.xlabel['list size'] plt.ylabel['runtime [seconds]'] plt.legend[] plt.savefig['append_vs_extend.jpg'] plt.show[]
9 vàappend[]
0 lấy đối số đầu vào Một kích thước danh sách số nguyênappend[]
1 và tạo danh sách các phần tử số nguyên tăng liên tục bằng các phương thứcappend[]
vàextend[]
. - Trong phần thứ hai, bạn so sánh thời gian chạy của cả hai hàm bằng 100 giá trị khác nhau cho kích thước danh sách
append[]
1. - Trong phần thứ ba, bạn vẽ mọi thứ bằng thư viện Python Matplotlib.
Ở đây, cốt truyện kết quả so sánh thời gian chạy của hai phương thức nối [] vs extend []. Trên trục X, bạn có thể thấy kích thước danh sách từ 0 đến 1.000.000 yếu tố. Trên trục Y, bạn có thể thấy thời gian chạy tính bằng giây cần thiết để thực hiện các chức năng tương ứng.
Biểu đồ kết quả cho thấy cả hai phương pháp đều cực kỳ nhanh đối với một vài hàng chục ngàn yếu tố. Trên thực tế, chúng nhanh đến mức hàm append[]
5 của mô -đun thời gian không thể nắm bắt được thời gian trôi qua.
Nhưng khi bạn tăng quy mô của danh sách lên hàng trăm ngàn yếu tố, phương pháp extend[]
bắt đầu giành chiến thắng:
Đối với các danh sách lớn với một triệu yếu tố, thời gian chạy của phương thức extend[]
nhanh hơn 60% so với thời gian chạy của phương thức append[]
.
Lý do là hàng loạt đã được đề cập của các hoạt động nối tiếp.
Tuy nhiên, hiệu ứng chỉ phát ra cho các danh sách rất lớn. Đối với danh sách nhỏ, bạn có thể chọn một trong hai phương thức. Chà, để rõ ràng mã của bạn, vẫn sẽ có ý nghĩa khi thích extend[]
hơn append[]
nếu bạn cần thêm một loạt các phần tử thay vì chỉ một yếu tố duy nhất.
Kỹ năng mã hóa của bạn - những gì cấp độ tiếp theo?
Nếu bạn yêu thích mã hóa và bạn muốn làm điều này toàn thời gian từ sự thoải mái của chính ngôi nhà của mình, bạn sẽ gặp may mắn:
Tôi đã tạo ra một hội thảo trên web miễn phí cho bạn thấy cách tôi bắt đầu như một người làm việc tự do Python sau khi các nghiên cứu khoa học máy tính của tôi làm việc tại nhà [và thấy con tôi lớn lên] trong khi kiếm được thu nhập toàn thời gian chỉ làm việc bán thời gian.
Hội thảo trên web: Làm thế nào để trở thành freelancer Python sáu con số?
Tham gia 21.419 Coders Python đầy tham vọng. Nó vui! ??
Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.
Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer [Nostarch 2020], đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.
Niềm đam mê của ông là viết, đọc và mã hóa.Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ.Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.