Hướng dẫn what is faster than appending to a list python? - cái gì nhanh hơn việc thêm vào một python danh sách?

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ối list.
  • Phương pháp list.extend[iter] thêm tất cả các yếu tố trong
    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[]
    0 vào cuối list.

Sự khác biệt giữa append[]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[]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ên append[]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ức append[]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.

Điều gì nhanh hơn so với phụ lục trong Python?

Vì vậy, khi bạn thêm các mặt hàng liên tục, bạn nên thích.append [], nếu không bạn nên sử dụng .extend [].. extend[] .

Tôi có thể sử dụng gì thay vì nối vào Python?

Trong Python, bạn có thể sử dụng phương thức Extend [] để thêm nhiều phần tử vào cuối danh sách.Tương tự như phương thức append [], phương thức mở rộng [] sửa đổi danh sách ban đầu.extend[] method to add multiple elements to the end of a list. Similar to the append[] method, the extend[] method modifies the original list.

Những gì nhanh hơn danh sách Python?

Các mảng Numpy nhanh hơn danh sách Python vì những lý do sau: Một mảng là một tập hợp các loại dữ liệu đồng nhất được lưu trữ trong các vị trí bộ nhớ liên tục. are faster than Python Lists because of the following reasons: An array is a collection of homogeneous data-types that are stored in contiguous memory locations.

Có phải thêm thêm nhanh hơn danh sách phụ lục?

Các bộ này nhanh hơn nhiều, nói chung.Kiểm tra tư cách thành viên trong danh sách là O [n], tuyến tính về kích thước của danh sách.Thêm vào một tập hợp là O [1], độc lập với số lượng các mục trong danh sách.. Testing for membership in a list is O[n], linear in the size of the list. Adding to a set is O[1], independent of the number of the items in the list.

Bài Viết Liên Quan

Chủ Đề