วิธีที่ดีที่สุดในการสร้างรายการว่างใหม่ใน Python คืออะไร?
l = [] 
หรือ
l = list()
ฉันถามสิ่งนี้เพราะสองสาเหตุ:
- เหตุผลทางเทคนิคซึ่งเป็นสิ่งที่เร็ว (การสร้างคลาสทำให้เกิดค่าใช้จ่ายหรือไม่)
 - ความสามารถในการอ่านโค้ด - อันไหนเป็นแบบแผนมาตรฐาน
 
วิธีที่ดีที่สุดในการสร้างรายการว่างใหม่ใน Python คืออะไร?
l = [] 
หรือ
l = list()
ฉันถามสิ่งนี้เพราะสองสาเหตุ:
คำตอบ:
นี่คือวิธีที่คุณสามารถทดสอบว่าโค้ดใดเร็วกว่า:
% python -mtimeit  "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop
% python -mtimeit  "l=list()"
1000000 loops, best of 3: 0.297 usec per loop
อย่างไรก็ตามในทางปฏิบัติการเริ่มต้นนี้น่าจะเป็นส่วนเล็ก ๆ ของโปรแกรมของคุณดังนั้นการกังวลเกี่ยวกับเรื่องนี้อาจเป็นเรื่องที่ผิด
การอ่านเป็นเรื่องส่วนตัวมาก ฉันชอบ[]แต่คนที่มีความรู้มากเช่น Alex Martelli ชอบlist()เพราะออกเสียงได้
list('')ให้[]แทน['']?
                    list('abcd')แล้วคุณเข้าใจทุกอย่าง)
                    list()ช้ากว่า[]เพราะโดยธรรมชาติ
มีการค้นหาสัญลักษณ์ (ไม่มีวิธีใดที่หลามจะรู้ล่วงหน้าหากคุณไม่ได้กำหนดรายการใหม่เพื่อให้เป็นอย่างอื่น!)
มีการเรียกใช้ฟังก์ชัน
จากนั้นจะต้องตรวจสอบว่ามีข้อโต้แย้งที่ผ่าน iterable (เพื่อให้สามารถสร้างรายการที่มีองค์ประกอบจากมัน) ps ไม่มีในกรณีของเรา แต่มี "ถ้า" ตรวจสอบ
ในกรณีส่วนใหญ่ความแตกต่างความเร็วจะไม่สร้างความแตกต่างในทางปฏิบัติใด ๆ
list()ช้ากว่า[]!
                    list()มีเพียงเพื่อตรวจสอบว่ามีข้อโต้แย้งใด ๆ เลย ... "ตรวจสอบว่า iterable" และ "สร้างรายการที่มีองค์ประกอบ" ก็ไม่ได้เกิดขึ้น; พวกเขาใช้เฉพาะในกรณีที่มีหาเรื่อง มันเป็นไปได้แม้กระทั่งว่ารหัส C สำหรับ[]สาย C list()รหัสเดียวกับ ไม่ว่าในกรณีใดเวลาที่ใช้ใน (c) จะน้อยเมื่อเทียบกับ (a) + (b)
                    []ฉันใช้
ฉันไม่รู้จริงๆเกี่ยวกับเรื่องนี้ แต่ดูเหมือนว่าสำหรับฉันโดยประสบการณ์แล้ว jpcgt นั้นถูกต้องแล้ว ตัวอย่างต่อไปนี้: ถ้าฉันใช้รหัสต่อไปนี้
t = [] # implicit instantiation
t = t.append(1)
ในล่ามแล้วโทร t ให้ฉันเพียง "t" โดยไม่มีรายการใด ๆ และถ้าฉันผนวกสิ่งอื่นเช่น
t = t.append(2)
ฉันได้รับข้อผิดพลาด "วัตถุไม่มีประเภท" ไม่มีแอตทริบิวต์ "ผนวก" " อย่างไรก็ตามถ้าฉันสร้างรายการโดย
t = list() # explicit instantiation
จากนั้นก็ใช้งานได้ดี
t.append(1)ปรับเปลี่ยนtในสถานที่ก็ไม่ได้อะไร แต่กลับNoneและคุณกำลังกำหนดนี้ไปNone tดังนั้นtอ้างอิงตอนนี้Noneแทนที่จะไปที่รายการ ความผิดพลาดของคุณที่นี่คือการเขียนแทนเพียงt=t.append(1) t.append(1)คุณจะสังเกตเห็นพฤติกรรมเดียวกันกับlist()ดังนั้นจึงไม่มีความแตกต่างที่นี่
                    เพียงเพื่อเน้น @Darkonaut คำตอบเพราะฉันคิดว่ามันควรจะมองเห็นได้มากขึ้น
new_list = []หรือnew_list = list()ทั้งคู่ก็ดี (ไม่สนใจประสิทธิภาพ) แต่append()ส่งคืนNoneเนื่องจากคุณไม่สามารถทำได้new_list = new_list.append(somethingเป็นผลคุณไม่สามารถทำ
ฉันงงมากกับการตัดสินใจแบบย้อนกลับ yuck