Hướng dẫn is pop slow in python? - pop có chậm trong python không?

0

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.
Learn more.

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:

while toVisit:
    y = toVisit.pop()
    if y in visited: return "Found diamond"
    visited.add(y)
    toVisit.extend(G[y])

(G là biểu đồ - Từ điển từ tên nút đến danh sách hàng xóm của họ)

Sau đó, phần thú vị: Tôi nghĩ rằng list.pop() có lẽ quá chậm, vì vậy tôi đã chạy một trình hồ sơ để so sánh tốc độ của việc triển khai này với deque.pop - và có một chút cải thiện. Sau đó, tôi đã so sánh nó với y = toVisit[0]; toVisit = toVisit[1:], và thật ngạc nhiên, lần thực hiện cuối cùng thực sự là nhanh nhất.

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 list.pop() thay vì hai lớp lót nhanh hơn nhiều?

Hướng dẫn is pop slow in python? - pop có chậm trong python khô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:

$ python -m timeit 'l = list(range(10000))' 'while l: l = l[1:]'
10 loops, best of 3: 365 msec per loop
$ python -m timeit 'l = list(range(10000))' 'while l: l.pop()'
1000 loops, best of 3: 1.82 msec per loop
$ python -m timeit 'import collections' \
         'l = collections.deque(list(range(10000)))' 'while l: l.pop()'
1000 loops, best of 3: 1.67 msec per loop

Đã 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

python -m timeit 'import itertools' 'l=iter(xrange(10000))' 'while next(l, None): l,a = itertools.tee(l)'

$ python -m timeit 'l = list(range(10000))' 'while l: l = l[1:]'
10 loops, best of 3: 365 msec per loop
$ python -m timeit 'l = list(range(10000))' 'while l: l.pop()'
1000 loops, best of 3: 1.82 msec per loop
$ python -m timeit 'import collections' \
         'l = collections.deque(list(range(10000)))' 'while l: l.pop()'
1000 loops, best of 3: 1.67 msec per loop
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.

li = list(range(500000))

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:

while (li):
    li.pop(0)

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.
I KNOW it would have been much faster if I even had used li.pop() without the index or maybe used filter function, list comprehension with conditional or whatever
But that's what I'm trying to show, how slow it is to remove certain list items specifically using pop and remove methods.

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!

 for num in li:
    li.remove(num)

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ụ:
that pop(0) is 8 times slower than pop(). Is it really that bad?
Performance improved when the list i have is reversed and used pop().
See this little snippet of code for example:

--- "" "Đ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
"""
This shows that poping from the back of the list is faster then the
beginning
of the list
"""
import profile

def tạo (num = 2000): return [[] cho p trong xrange (num)]
return [[] for p in xrange(num)]

def popper (l): trong khi l: l.pop ()
while l:
l.pop()

def pooper (l): trong khi l: l.pop (0)
while 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) ')
print "###### Time taken to generate list"
profile.run('generate(50000)')
l = generate(50000)
print "###### Time taken to pop at the end of the list"
profile.run('popper(l)')
l = generate(50000)
print "###### Time taken to pop at the beginning of the list"
profile.run('pooper(l)')

"" "Bản in này:
This prints:

#Phiếu
3 function calls in 0.260 CPU seconds

Đặ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)
1 0.040 0.040 0.230 0.230 :1(?)
1 0.190 0.190 0.190 0.190 pooperpoper.py:7(generate)
1 0.030 0.030 0.260 0.260 profile:0(generate(50000))
0 0.000 0.000 profile:0(profiler)

#Phiếu
3 function calls in 0.260 CPU seconds

Đặ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)
1 0.000 0.000 0.260 0.260 :1(?)
1 0.260 0.260 0.260 0.260 pooperpoper.py:10(popper)
1 0.000 0.000 0.260 0.260 profile:0(popper(l))
0 0.000 0.000 profile:0(profiler)

#Phiếu
3 function calls in 8.870 CPU seconds

Đặ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)
1 0.000 0.000 8.870 8.870 :1(?)
1 8.870 8.870 8.870 8.870 pooperpoper.py:14(pooper)
1 0.000 0.000 8.870 8.870 profile:0(pooper(l))
0 0.000 0.000 profile:0(profiler)
"""

#Phiếu
Regards: Wari Wahab
RoughingIT - http://roughingit.subtlehints.net
PyBlosxom - http://roughingit.subtlehints.net/pyblosxom

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)
I've been playing around with very large lists and found out by chance
that pop(0) is 8 times slower than pop(). Is it really that bad?
Performance improved when the list i have is reversed and used pop().

#Phiếu
pop() removes rightmost list element by shortening the length of the list by 1.
pop(0) removes leftmost element by shifting the rest of the elements one
place left and then shortening the length of the list by 1.
It is the shifting that is taking a lot of time.

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) "" "
***@alum.rpi.edu
303 442 2625

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)
I've been playing around with very large lists and found out by chance
that pop(0) is 8 times slower than pop(). Is it really that bad?
Performance improved when the list i have is reversed and used pop().

#Phiếu
got no measurable difference between pop() and pop(0).

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?
I've been playing around with very large lists and found out by chance
that pop(0) is 8 times slower than pop(). Is it really that bad?

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.
elements in our list.

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.
doing a pop() at the front of a list can be expensive. It's not
necessarily eight times slower: in fact, the cost scales linearly with the
size of the list.

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ỗ.
same reason: it ends up doing a lot of data movement as the elements are
shoved off to the side to make room.

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.
of our containers, and when we need to do it efficiently, we really do
need to be aware of how array-like lists behave. We may even need to
think about data structures that will help us do what we want.

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?
I've been playing around with very large lists and found out by chance
that pop(0) is 8 times slower than pop(). Is it really that bad?

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.
cute trick we can employ to remove elements from the front of a list: we
can swap the first and last elements, and then do a pop() off then end of
our list, because popping at the end is quite efficient.

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.
... L[-1], L[0] = L[0], L[-1]
... return L.pop()
...

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.
mylist

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":
anywhere in our list. Notice, though, that the list will inevitably get
out of order when we do the swap-with-last-element trick: the
applicability of this technique really depends on the program we're
writing. It might not be the right thing to do if we want to maintain the
relative order of things in our list.

là rất khuyến khích đọc; Nó nói về những vấn đề này.
your lists (lots of deletes, lots of inserts, etc.), we can probably chat
about efficiency issues on Python-Tutor.

Chúc bạn may mắn!
item = list[0]
del list[0]
return item

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ả.
you do "del list[0]" you reshuffle the entire list.

### ... l [-1], l [0] = l [0], l [-1] ... return l.pop () ...
the list, the bigger the list, the bigger the time diff.

Đăng bởi Wari Wahab
than a list. We can't really saw what without seeing what you
are trying to do...

mylist = phạm vi (10) Mylist
Magnus Lycka (It's really Lyckå), ***@thinkware.se
Thinkware AB, Sweden, www.thinkware.se
I code Python ~ The Agile Programming Language

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del list[0]
return item

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.
removeFront(list)

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.
see what the thoughts are.

/Gus

Chúc bạn may mắn!
From: tutor-***@python.org [mailto:tutor-***@python.org]On Behalf Of
Danny Yoo
Sent: Wednesday, June 18, 2003 6:36 PM
To: Wari Wahab
Cc: ***@python.org
Subject: Re: [Tutor] why is list.pop(0) slow? [swap-with-last-element
trick]

Đă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?
I've been playing around with very large lists and found out by chance
that pop(0) is 8 times slower than pop(). Is it really that bad?

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.
cute trick we can employ to remove elements from the front of a list: we
can swap the first and last elements, and then do a pop() off then end of
our list, because popping at the end is quite efficient.

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.
... L[-1], L[0] = L[0], L[-1]
... return L.pop()
...

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.
mylist

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":
anywhere in our list. Notice, though, that the list will inevitably get
out of order when we do the swap-with-last-element trick: the
applicability of this technique really depends on the program we're
writing. It might not be the right thing to do if we want to maintain the
relative order of things in our list.

là rất khuyến khích đọc; Nó nói về những vấn đề này.
your lists (lots of deletes, lots of inserts, etc.), we can probably chat
about efficiency issues on Python-Tutor.

_____________________________________________Tutor Maillist - ***@python.orghttp: //mail.python.org/mailman/listinfo/tutor
Tutor maillist - ***@python.org
http://mail.python.org/mailman/listinfo/tutor

Đăng bởi Wari Wahabis nó thực sự tệ như vậy?
Is it really that bad?

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?
is still fairly fast?

Đă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 ().
Performance improved when the list i have is reversed and used 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ơ.)
vector or array in other languages. (In C++ STL, I think
the closest fit is a vector.)

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.
to consider other implementations. Obviously, the .reverse()
strategy won't be of any help if you alternate between pushing
and popping as is common with queues.

Cookbook Python AS ASPN chứa một số ví dụ về những chiếc nhẫn đó là hữu ích.
might be useful.

.
Magnus Lycka (It's really Lyckå), ***@thinkware.se
Thinkware AB, Sweden, www.thinkware.se
I code Python ~ The Agile Programming Language

Đă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).
I've been playing around with very large lists and found out by
chance
that pop(0) is 8 times slower than pop(). Is it really that bad?
Performance improved when the list i have is reversed and used
pop().
How big are your lists? I just tried a 1 million member list and
got no measurable difference between pop() and 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ồ .
... a=clock()
... l.pop()
... b=clock()
... l.pop(0)
... c=clock()
... print b-a
... print c-b
...
999999
0
0.101023984606
0.059478771889
999998
1
0.0128689504199
0.0605054383992
999997
2
0.0128781694661
0.0593547338127

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.
approximately twice as much time as pop(0) , whereas
in all the following executions of the body of the loop
pop() is approximately five times faster than pop(0).
Notice that only the performance of pop() changes.

... Đối với i trong phạm vi (3): ... a = clock () ... l.pop (0) ... b = clock () ... l.pop () ... c = đồng hồ .
... a=clock()
... l.pop(0)
... b=clock()
... l.pop()
... c=clock()
... print b-a
... print c-b
...
0
999999
0.14588973015
0.0120258267389
1
999998
0.065228104346
0.0120895219675
2
999997
0.0598760289713
0.0118950839017

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
significantly slower than any following one. And
pop() in fact five times faster than pop(0) with
this 1000000-member-list

(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.