Hướng dẫn is pop slow in python? - pop có chậm trong python không?
0 Show Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm. Gần đây tôi đã viết một triển khai BFS nhanh chóng và bẩn thỉu, để tìm kim cương trong một biểu đồ có hướng. Vòng lặp BFS trông như thế này:
( Sau đó, phần thú vị: Tôi nghĩ rằng Liệu điều này có ý nghĩa gì? Có bất kỳ lý do hiệu suất nào để sử dụng
Khi được hỏi ngày 7 tháng 5 năm 2012 lúc 6:48May 7, 2012 at 6:48
11 Bạn đã đo sai. Với CPython 2.7 trên x64, tôi nhận được kết quả sau:
Đã trả lời ngày 7 tháng 5 năm 2012 lúc 6:54May 7, 2012 at 6:54
Phihagphihagphihag 268K68 Huy hiệu vàng441 Huy hiệu bạc463 Huy hiệu Đồng68 gold badges441 silver badges463 bronze badges 7 Sử dụng máy phát điện cho sự hoàn hảo
0Đã trả lời ngày 19 tháng 1 năm 2014 lúc 11:49Jan 19, 2014 at 11:49
2 Tôi biết có một danh sách.clear (), tôi chỉ chia sẻ rằng tôi không mong đợi rằng sử dụng danh sách.pop () và list.remove () cụ thể có thể làm chậm chương trình nhiều như vậy.
Tạo một danh sách là nhanh chóng. Vì vậy, chúng tôi sẽ kiểm tra POP/Xóa các giá trị cụ thể. Với mục đích của "điểm chuẩn" này, chúng tôi sẽ xóa tất cả các yếu tố khỏi danh sách:
Phải mất 74,735 & nbsp; giây để bật tất cả các yếu tố! Nó dài một cách vô lý. Tôi biết rằng nó sẽ nhanh hơn nhiều nếu tôi thậm chí đã sử dụng li.pop () mà không có chỉ số hoặc có thể được sử dụng chức năng bộ lọc, liệt kê sự hiểu biết với điều kiện hoặc bất cứ điều gì nhưng đó là những gì tôi đang cố gắng hiển thị, nó chậm như thế nào Để xóa một số mục danh sách nhất định bằng cách sử dụng các phương thức POP và xóa.74.735 seconds to pop all the
elements! It's ridiculously long. Và li.remove (), luôn yêu cầu một giá trị được chỉ định để loại bỏ, thậm chí còn tệ hơn pop!
Cái này đã mất 303.268 & nbsp; giây để hoàn thành. Thật điên rồ.303.268 seconds to complete. How crazy it is. Tôi đã vui vẻ với các cấu trúc dữ liệu trừu tượng. Các danh sách được liên kết đã triển khai và một hàng đợi chạy trên các danh sách được liên kết. Và vì lợi ích, tôi quyết định so sánh hiệu suất của hàng đợi dựa trên danh sách được liên kết và danh sách Python thông thường. Và tôi đã rất ngạc nhiên. Khi hàng đợi danh sách được liên kết của tôi định hóa 500.000 yếu tố trong 0,5 giây, trong khi hàng đợi danh sách Python đã thực hiện nó trong 75 giây. Discussion: [Gia sư] Tại sao danh sách.pop (0) chậm? Tôi đã chơi xung quanh với các danh sách rất lớn và được phát hiện bởi Chancethat Pop (0) chậm hơn 8 lần so với pop (). Có thực sự là xấu không? Hiệu suất được cải thiện khi danh sách tôi có được đảo ngược và sử dụng pop (). Xem đoạn mã nhỏ này chẳng hạn: ví dụ: --- "" "Điều này cho thấy rằng Poping từ phía sau danh sách nhanh hơn sau đó là TheBeginningof Danh sách" "" Hồ sơ nhập khẩu def tạo (num = 2000): return [[] cho p trong xrange (num)] def popper (l): trong khi l: l.pop () def pooper (l): trong khi l: l.pop (0) Nếu __name__ == '__main __': in "###### Thời gian được thực hiện để tạo danh sách" Cấu hình.run ('Tạo (50000)') l = tạo (50000) Pop ở cuối danh sách "hồ sơ.run ('popper (l)') l = created (l) ') "" "Bản in này: #Phiếu Đặt hàng bởi: Tên tiêu chuẩn NCALLS TOTTIME PERCALL CUMTIME PERCALL FILENAME: Lineno (Hàm) 1 0,040 0.040 0.230 0.230: 1 (?) 1 0.190 0.190 0.190 0.190 0,000 Hồ sơ: 0 (Profiler) #Phiếu Đặt hàng bởi: Tên tiêu chuẩn NCALLS TOTTIME PERCALL CUMTIME PERCALL FILENAME: Lineno (Hàm) 1 0,040 0.040 0.230 0.230: 1 (?) 1 0.190 0.190 0.190 0.190 0,000 Hồ sơ: 0 (Profiler) #Phiếu Đặt hàng bởi: Tên tiêu chuẩn NCALLS TOTTIME PERCALL CUMTIME PERCALL FILENAME: Lineno (Hàm) 1 0,040 0.040 0.230 0.230: 1 (?) 1 0.190 0.190 0.190 0.190 0,000 Hồ sơ: 0 (Profiler) #Phiếu Ncalls Tottime percall cumtime percall Tên: Lineno (chức năng) 1 0,000 0.000 0.260 0.260: 1 (?) 1 0.260 0.260 0.260 0.260 0,000 Hồ sơ: 0 (Profiler) #Phiếu Ncalls Tottime percall cumtime percall Tên: Lineno (chức năng) 1 0,000 0.000 8,870 8.870: 1 (?) 1 8.870 8.870 8.870 8.870 0,000 Hồ sơ: 0 (Profiler) "" " Ncalls Tottime percall cumtime percall Tên: Lineno (chức năng) 1 0,000 0.000 0.260 0.260: 1 (?) 1 0.260 0.260 0.260 0.260 0,000 Hồ sơ: 0 (Profiler) #Phiếu Alan G. Đăng bởi Wari Wahabi đã được chơi xung quanh với các danh sách rất lớn và được phát hiện bởi Chancethat Pop (0) chậm hơn 8 lần so với pop (). Là nó thực sự là xấu? Chào Wari, Có: Lý do là vì pop (0) liên quan đến việc chuyển tất cả các phần còn lại trong danh sách của chúng tôi. Khi một danh sách nhỏ, nó không phải là vấn đề lớn. Nhưng khi một danh sách lớn, thực hiện một pop () ở phía trước của một danh sách có thể tốn kém. Nó chậm hơn không cần thiết hơn tám lần: trên thực tế, chi phí quy mô tuyến tính với việc đánh giá cao danh sách. Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Chương 19 của "Làm thế nào để suy nghĩ như một nhà khoa học máy tính": http://www.ibiblio.org/obp/thinkCSpy/chap19.htm là rất khuyến khích đọc; Nó nói về những vấn đề này. Chúc bạn may mắn! Đăng bởi Wari Wahabi đã được chơi xung quanh với các danh sách rất lớn và được phát hiện bởi Chancethat Pop (0) chậm hơn 8 lần so với pop (). Là nó thực sự là xấu? Chào Wari, Có: Lý do là vì pop (0) liên quan đến việc chuyển tất cả các phần còn lại trong danh sách của chúng tôi. Khi một danh sách nhỏ, nó không phải là vấn đề lớn. Nhưng khi một danh sách lớn, thực hiện một pop () ở phía trước của một danh sách có thể tốn kém. Nó chậm hơn không cần thiết hơn tám lần: trên thực tế, chi phí quy mô tuyến tính với việc đánh giá cao danh sách. Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Chương 19 của "Làm thế nào để suy nghĩ như một nhà khoa học máy tính": Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. removeFront(mylist) 0 Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. removeFront(mylist) 9 Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Chương 19 của "Làm thế nào để suy nghĩ như một nhà khoa học máy tính": là rất khuyến khích đọc; Nó nói về những vấn đề này. Chúc bạn may mắn! Nhân tiện, nếu thứ tự các yếu tố của bạn không quan trọng, thì có thủ thuật cấp tính mà chúng ta có thể sử dụng để loại bỏ các phần tử khỏi mặt trước của danh sách: Wecan hoán đổi các yếu tố đầu tiên và cuối cùng, sau đó thực hiện một pop () Danh sách, bởi vì xuất hiện ở cuối là khá hiệu quả. ### ... l [-1], l [0] = l [0], l [-1] ... return l.pop () ... Đăng bởi Wari Wahab mylist = phạm vi (10) Mylist [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. 4 Chương 19 của "Làm thế nào để suy nghĩ như một nhà khoa học máy tính": là rất khuyến khích đọc; Nó nói về những vấn đề này. /Gus Chúc bạn may mắn! Đăng bởi Wari Wahabi đã được chơi xung quanh với các danh sách rất lớn và được phát hiện bởi Chancethat Pop (0) chậm hơn 8 lần so với pop (). Là nó thực sự là xấu? Chào Wari, Có: Lý do là vì pop (0) liên quan đến việc chuyển tất cả các phần còn lại trong danh sách của chúng tôi. Khi một danh sách nhỏ, nó không phải là vấn đề lớn. Nhưng khi một danh sách lớn, thực hiện một pop () ở phía trước của một danh sách có thể tốn kém. Nó chậm hơn không cần thiết hơn tám lần: trên thực tế, chi phí quy mô tuyến tính với việc đánh giá cao danh sách. Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Chương 19 của "Làm thế nào để suy nghĩ như một nhà khoa học máy tính": Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. removeFront(mylist) 0 Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Nhân tiện, chèn () vào phía trước của một danh sách có thể tốn kém cho lý do theo ý nghĩa: nó kết thúc việc thực hiện rất nhiều chuyển động dữ liệu khi các yếu tố xuất hiện sang một bên để nhường chỗ. removeFront(mylist) 9 Khi chúng tôi kết thúc việc thực hiện rất nhiều chèn ở phía trước cũng như các thùng chứa của chúng tôi và khi chúng tôi cần làm điều đó một cách hiệu quả, chúng tôi thực sự đã thực hiện để biết cách thức hoạt động của các danh sách giống như mảng. Chúng tôi thậm chí có thể cần nói về các cấu trúc dữ liệu sẽ giúp chúng tôi làm những gì chúng tôi muốn. Chương 19 của "Làm thế nào để suy nghĩ như một nhà khoa học máy tính": là rất khuyến khích đọc; Nó nói về những vấn đề này. _____________________________________________Tutor Maillist - ***@python.orghttp: //mail.python.org/mailman/listinfo/tutor Đăng bởi Wari Wahabis nó thực sự tệ như vậy? Tồi tệ hơn nếu bạn tăng kích thước của danh sách ... nhưng không phải vẫn còn khá nhanh? Đăng bởi Wari Wahabperformance được cải thiện khi danh sách tôi có được đảo ngược và sử dụng pop (). Có, sau đó bạn chỉ cần tái cấu trúc danh sách một lần. Danh sách Python không phải là một danh sách được liên kết, nó giống như avector hoặc mảng trong các ngôn ngữ khác. (Trong C ++ STL, tôi nghĩ rằng sự phù hợp gần nhất là một vectơ.) Nếu bạn có một ứng dụng trong đó vấn đề này bạn có thể muốn xem xét các triển khai khác. Rõ ràng, chiến lược .reverse () sẽ không giúp ích gì nếu bạn xen kẽ giữa việc đẩy và xuất hiện như là phổ biến với hàng đợi. Cookbook Python AS ASPN chứa một số ví dụ về những chiếc nhẫn đó là hữu ích. . Đăng bởi Wari Wahabi đã được chơi xung quanh với các danh sách rất lớn và phát hiện ra Bychancethat Pop (0) chậm hơn 8 lần so với pop (). Có thực sự xấu không? Hiệu suất được cải thiện khi danh sách tôi có được đảo ngược và usedPop (). Danh sách của bạn lớn như thế nào? Tôi chỉ đã thử một danh sách thành viên 1 triệu và không có sự khác biệt có thể đo lường được giữa pop () và pop (0). Chào mọi người! Tôi đã thử điều này và (luôn luôn) tìm thấy những điều sau đây ... Đối với i trong phạm vi (3): ... a = clock () ... l.pop () ... b = clock () ... l.pop (0) ... c = đồng hồ . có nghĩa là: khi được thực hiện lần đầu tiên, pop () mất khoảng gấp đôi thời gian so với pop (0), trong khi tất cả các lần thực hiện sau đây của cơ thể của looppop () nhanh hơn khoảng năm lần so với pop (0). Chỉ có hiệu suất của pop () thay đổi. ... Đối với i trong phạm vi (3): ... a = clock () ... l.pop (0) ... b = clock () ... l.pop () ... c = đồng hồ . Hmmm. Vì vậy, cuộc gọi đầu tiên của phương thức pop phát hành chậm hơn bất kỳ cái nào sau. Andpop () trên thực tế nhanh hơn năm lần so với pop (0) với danh sách này 1000000 thành viên (Thực hiện trên máy 400 MHz Windows 2000) Những lời chúc tốt đẹp nhất, Gregor Loading... Pop Python mất bao lâu?Độ phức tạp thời gian của hàm python pop ().Độ phức tạp của thời gian của hàm pop () danh sách python là không đổi o (1).Không quan trọng có bao nhiêu phần tử trong danh sách, việc loại bỏ một phần tử khỏi danh sách mất cùng một lúc và nó không phụ thuộc vào số lượng các phần tử được bật ra.constant O(1). It does not matter how many elements are in the list, removing an element from a list takes the same time and it does not depend on the number of elements to be popped.
Là pop hay loại bỏ python nhanh hơn?Pop sẽ nhanh hơn, đặc biệt là đối với mục cuối cùng trong danh sách;Tuy nhiên, nếu bạn đã bắt đầu với chính mục này và đã có một hoạt động O (n) với một so sánh phong phú để tìm thấy nó., especially for the last item in the list; however, if you've started with the item itself and have already had a O(n) operation with a rich comparison to find its .
Tại sao chúng ta đang sử dụng pop trong python?Danh sách Pop trong Python là một hàm được xác định trước, được xây dựng, loại bỏ một mục tại chỉ mục được chỉ định khỏi danh sách.Bạn cũng có thể sử dụng Pop trong Python mà không đề cập đến giá trị chỉ mục.Trong các trường hợp như vậy, hàm pop () sẽ loại bỏ phần tử cuối cùng của danh sách.removes an item at the specified index from the list. You can also use pop in Python without mentioning the index value. In such cases, the pop() function will remove the last element of the list.
Bạn có thể sử dụng pop trong python không?Python Danh sách pop () là một hàm sẵn có trong Python loại bỏ và trả về giá trị cuối cùng từ danh sách hoặc giá trị chỉ mục đã cho. that removes and returns the last value from the List or the given index value. |