Hướng dẫn is python append faster? - python nối có nhanh hơn không?

Nội bộ Python sâu

Hướng dẫn is python append faster? - python nối có nhanh hơn không?

Nội phân chính

  • Nội bộ Python sâu
  • Làm thế nào chúng ta sẽ đo lường hiệu suất?
  • Sử dụng toán tử +
  • Sử dụng một vòng lặp cho
  • Sử dụng append ()
  • Sử dụng mở rộng ()
  • Giải nén với * toán tử
  • Sử dụng itertools.chain ()
  • So sánh các phương pháp
  • Là nối vào danh sách Python chậm?
  • Có cái gì đó nhanh hơn so với phần phụ lục?
  • Là người phụ lục hay chèn python nhanh hơn?
  • Làm thế nào để bạn tăng tốc một danh sách trong Python?

Ảnh của Brayden Law từ Pexels

Python là một ngôn ngữ phổ biến ngày nay tìm thấy việc sử dụng nó hàng ngày. Chúng tôi sử dụng để xây dựng mã và sau đó, để xây dựng ước mơ. Nhưng, mã luôn có thể được tối ưu hóa và đó là một điều giữ cho sự quyến rũ của việc mã hóa nguyên vẹn.

Lúc đầu, câu hỏi rằng cách mà cách nhanh nhất để thêm một yếu tố vào danh sách Python là gì? sẽ…

Hãy chạy một số bài kiểm tra thời gian* với

>>> lst = [[] for _ in xrange(3)]
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are different
>>> id(lst[0])
28796688
>>> id(lst[1])
28796648
>>> id(lst[2])
28736168
>>>
2:

>>> from timeit import timeit
>>>
>>> # Test 1
>>> test = """
... my_list = []
... for i in xrange(50):
...     my_list.append(0)
... """
>>> timeit(test)
22.384258893239178
>>>
>>> # Test 2
>>> test = """
... my_list = []
... for i in xrange(50):
...     my_list += [0]
... """
>>> timeit(test)
34.494779364416445
>>>
>>> # Test 3
>>> test = "my_list = [0 for i in xrange(50)]"
>>> timeit(test)
9.490926919482774
>>>
>>> # Test 4
>>> test = "my_list = [0] * 50"
>>> timeit(test)
1.5340533503559755
>>>

Như bạn có thể thấy ở trên, phương pháp cuối cùng là nhanh nhất cho đến nay.


Tuy nhiên, nó chỉ nên được sử dụng với các vật phẩm bất biến (như số nguyên). Điều này là do nó sẽ tạo ra một danh sách với các tham chiếu đến cùng một mục.

Dưới đây là một cuộc biểu tình:

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>

Hành vi này rất thường xuyên không mong muốn và có thể dẫn đến các lỗi trong mã.

Nếu bạn có các mục có thể thay đổi (chẳng hạn như danh sách), thì bạn nên sử dụng khả năng hiểu danh sách vẫn rất nhanh:

>>> lst = [[] for _ in xrange(3)]
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are different
>>> id(lst[0])
28796688
>>> id(lst[1])
28796648
>>> id(lst[2])
28736168
>>>

*Lưu ý: Trong tất cả các bài kiểm tra, tôi đã thay thế

>>> lst = [[] for _ in xrange(3)]
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are different
>>> id(lst[0])
28796688
>>> id(lst[1])
28796648
>>> id(lst[2])
28736168
>>>
3 bằng
>>> lst = [[] for _ in xrange(3)]
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are different
>>> id(lst[0])
28796688
>>> id(lst[1])
28796648
>>> id(lst[2])
28736168
>>>
4. Vì cái sau trả về một iterator, nó phải luôn luôn nhanh hơn cái trước.

Hôm nay chúng tôi sẽ sử dụng mô -đun thời gian để cố gắng tìm ra cách nhanh nhất để kết hợp một vài danh sách trong Python.

Chúng tôi sẽ xem xét các cách khác nhau để kết hợp danh sách

  • Sử dụng toán tử +
  • Sử dụng một vòng lặp cho
  • Sử dụng append ()
  • Sử dụng mở rộng ()
  • Giải nén với * toán tử
  • Sử dụng itertools.chain ()

Làm thế nào chúng ta sẽ đo lường hiệu suất?

So sánh các phương pháp and lst2 are two lists with 1000000 random integers, we have created a function that will combine the lists in the different approaches mentioned above. This function will be called 10 times and we will measure the average time taken for each approach.

Sử dụng toán tử +

def func(lst1 , lst2):
    lst3 = lst1 + lst2

Sử dụng một vòng lặp cho

On average it took 0.01051248973235488 seconds

Sử dụng append ()

Sử dụng mở rộng ()

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]

Sử dụng một vòng lặp cho

def func(lst1 , lst2):
    lst3 = []

    for element in lst1:
        lst3.append(element)

    for element in lst2:
        lst3.append(element) 

Sử dụng một vòng lặp cho

On average it took 0.09956733733415604 seconds

Sử dụng append ()

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]

Sử dụng append ()

Sử dụng mở rộng ()lst1 is updated

def func(lst1 , lst2):
    lst1.append(lst2) 

Sử dụng một vòng lặp cho

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
0

Sử dụng append ()

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
1

Sử dụng mở rộng ()lst1 get’s updated. Also notice unlike the previous approaches, we are not directly combining the elements of both the list. lst1 contains lst2 as an element

Sử dụng mở rộng ()

Giải nén với * toán tửlst2 to lst1, it adds the elements of lst2 to lst1

Sử dụng itertools.chain ()

Sử dụng một vòng lặp cho

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
3

Sử dụng append ()

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
4

Sử dụng mở rộng ()

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
5

Giải nén với * toán tử

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
6

Sử dụng một vòng lặp cho

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
7

Sử dụng append ()

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]

Sử dụng itertools.chain ()

>>> lst = [[]] * 3
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are the same
>>> id(lst[0])
28734408
>>> id(lst[1])
28734408
>>> id(lst[2])
28734408
>>>
9

So sánh các phương phápchain() function returns an iterator object. We can convert it to a list by using the list() function.

Sử dụng một vòng lặp cho

>>> lst = [[] for _ in xrange(3)]
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are different
>>> id(lst[0])
28796688
>>> id(lst[1])
28796648
>>> id(lst[2])
28736168
>>>
0

Sử dụng append ()

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]

So sánh các phương pháp

Là nối vào danh sách Python chậm?

Có cái gì đó nhanh hơn so với phần phụ lục?


Là người phụ lục hay chèn python nhanh hơn?

Làm thế nào để bạn tăng tốc một danh sách trong Python?


Là nối vào danh sách Python chậm?

Có cái gì đó nhanh hơn so với phần phụ lục?append must be slower than pre-allocating the entire length of the list and assigning to individual indices of that list (of course you can only do that if you know how big you will need the list to be beforehand).

Có cái gì đó nhanh hơn so với phần phụ lục?

Là người phụ lục hay chèn python nhanh hơn?

Là người phụ lục hay chèn python nhanh hơn?

Làm thế nào để bạn tăng tốc một danh sách trong Python? It is faster and direct. If we want to add an element somewhere within a list, we should use insert . It is the only option for this.

Làm thế nào để bạn tăng tốc một danh sách trong Python?

Ảnh của Brayden Law từ Pexels.

Python là một ngôn ngữ phổ biến ngày nay tìm thấy việc sử dụng nó hàng ngày. Chúng tôi sử dụng để xây dựng mã và sau đó, để xây dựng ước mơ. Nhưng, mã luôn có thể được tối ưu hóa và đó là một điều giữ cho sự quyến rũ của việc mã hóa nguyên vẹn.

Giảm sử dụng cho vòng lặp.....

Sử dụng danh sách hiểu.....

Sử dụng nhiều bài tập.....

Không sử dụng các biến toàn cầu.....

Sử dụng chức năng thư viện.....

Chuỗi Concatenate với tham gia.....

Sử dụng máy phát điện ..