Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - วิธีสร้างลิสต์ (Initialize List) ใดเร็วที่สุด?

Python ยืดหยุ่น สร้างลิสต์ได้หลายวิธี แต่วิธีแต่ละอย่างมีความเร็วต่างกัน Python ช้ากว่า C++/Java โดยเฉพาะ for loop ในขณะที่ map(), filter() เร็วกว่าเพราะเขียนใน C

เปรียบเทียบ 4 วิธี (รัน 500 รอบ หาค่าเฉลี่ย)

import time

forLoopTime = []
whileLoopTime = []
listCompTime = []
starOpTime = []

for _ in range(500):
    # 1. for loop + append
    start = time.time()
    a = []
    for i in range(10000):
        a.append(0)
    forLoopTime.append(time.time() - start)

    # 2. while loop + append
    start = time.time()
    a = []
    i = 0
    while i < 10000:
        a.append(0)
        i += 1
    whileLoopTime.append(time.time() - start)

    # 3. List comprehension
    start = time.time()
    a = [0 for i in range(10000)]
    listCompTime.append(time.time() - start)

    # 4. * operator
    start = time.time()
    a = [0] * 10000
    starOpTime.append(time.time() - start)

print(f"for loop:      {sum(forLoopTime)/500:.6f} s")
print(f"while loop:    {sum(whileLoopTime)/500:.6f} s")
print(f"list comp:     {sum(listCompTime)/500:.6f} s")
print(f"* operator:    {sum(starOpTime)/500:.6f} s")

ผลลัพธ์ทั่วไป

for loop:      0.006237 s
while loop:    0.008877 s
list comp:     0.003185 s
* operator:    0.000372 s

สรุป

  1. [0] * n เร็วที่สุด (สร้างลิสต์ใน C ระดับเดียว)
  2. List comprehension เร็วกว่า for loop ประมาณ 2 เท่า
  3. for loop + append ช้ากว่า list comprehension
  4. while loop ช้าที่สุด

หมายเหตุ: [0]*n สร้างอ้างอิงซ้ำกันสำหรับ mutable objects (เช่น list ใน list) ต้องระวัง