วิธีที่เร็วที่สุดในการแปลงตัววนซ้ำเป็นรายการ


185

มีiteratorวัตถุมีบางสิ่งที่เร็วกว่าดีกว่าหรือถูกต้องกว่า list comprehension เพื่อรับรายการของวัตถุที่ส่งคืนโดย iterator หรือไม่?

user_list = [user for user in user_iterator]

1
ก่อนทำการปรับให้เหมาะสมให้แน่ใจว่าคุณได้ทำโปรไฟล์เพื่อพิสูจน์ว่านี่เป็นคอขวดจริงๆ
S.Lott

1
@ S.Lott ปกติแล้วฉันเห็นด้วยกับทัศนคตินั้น แต่ในกรณีนี้มันควรจะปรับให้เหมาะสมมากที่สุดซึ่งตามปกติในกรณีของ Python จะปรับให้เหมาะสมสำหรับความเร็วเช่นกัน
aaronasterling

3
OP ไม่ได้พูดอะไรเกี่ยวกับการมีปัญหาคอขวด มันเป็นคำถามทั่วไปที่สมบูรณ์แบบที่มีคำตอบง่ายๆมันไม่จำเป็นต้องขึ้นอยู่กับแอพพลิเคชั่นเฉพาะที่สามารถเรียกใช้ผ่าน profiler
เคนวิลเลียมส์

4
[*iterator]วิธีที่มีขนาดกะทัดรัดที่สุดคือ
Challenger5

คำตอบ:


336
list(your_iterator)

5
จริงๆแล้วเกือบจะเร็วกว่าสักหน่อย นอกจากนี้ชัดเจนมากขึ้น
โธมัสวูสเตอร์

8
@systempuntoout มันทำงานทั้งหมดใน C. รายการความเข้าใจอยู่ในหลาม แน่นอนมันทำงานได้เร็วขึ้น
aaronasterling

3
ฉันยังคงเกลียดชังโดยสิ้นเชิงว่าไม่มีวิธีที่ดีกว่าในงูหลาม มันน่าเบื่อที่จะต้องแก้ไขทั้งสองด้านของนิพจน์เท่านั้นเพื่อให้สามารถตัดหรือทำดัชนีได้ (พบมากใน python3 ถ้ามันแสดงออกบริสุทธิ์เช่นไปรษณีย์หรือแผนที่ที่มีฟังก์ชั่นบริสุทธิ์)
โจดังนั้น

อืมมม import matplotlib.pyplot as plt' followed by ax = plt.gca () `และlist(ax._get_lines.prop_cycler)ส่งผลให้เกิดการวนซ้ำไม่สิ้นสุด มีวิธีจัดการกับสิ่งนี้อย่างสง่างามหรือไม่?
Jens Munk

5
ในการทดสอบอย่างรวดเร็วของฉันที่ดูเหมือนจะเป็นเกี่ยวกับรวดเร็วเป็นสองเท่า[*your_iterator] list(your_iterator)นี่เป็นเรื่องจริงหรือไม่หรือเป็นเพียงแค่โอกาสเกิดครั้งหนึ่งเท่านั้น (ฉันใช้mapเป็นตัววนซ้ำ)
Neinstein

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.