วิธีที่มีประสิทธิภาพมากที่สุดใน Python 3 เป็นหนึ่งในวิธีต่อไปนี้ (ใช้ตัวอย่างที่คล้ายกัน):
ด้วยสไตล์"ความเข้าใจ" :
next(i for i in range(100000000) if i == 1000)
คำเตือน : นิพจน์ใช้งานได้กับ Python 2 แต่ในตัวอย่างนั้นใช้range
เพื่อส่งคืนออบเจกต์ที่ทำซ้ำได้ใน Python 3 แทนรายการเช่น Python 2 (ถ้าคุณต้องการสร้าง iterable ใน Python 2 ใช้xrange
แทน)
หมายเหตุว่าหลีกเลี่ยงการแสดงออกที่จะสร้างรายชื่อในการแสดงออกของความเข้าใจที่ว่าจะก่อให้เกิดการสร้างรายการที่มีองค์ประกอบก่อนกรององค์ประกอบทั้งหมดและจะทำให้เกิดการประมวลผลตัวเลือกทั้งหมดแทนการหยุดซ้ำครั้งเดียวnext([i for ...])
i == 1000
ด้วยรูปแบบ"ใช้งานได้" :
next(filter(lambda i: i == 1000, range(100000000)))
คำเตือน : วิธีนี้ใช้ไม่ได้ใน Python 2 แม้จะแทนที่range
ด้วยxrange
เนื่องจากจะfilter
สร้างรายการแทนตัววนซ้ำ (ไม่มีประสิทธิภาพ) และnext
ฟังก์ชันจะทำงานกับตัววนซ้ำเท่านั้น
ค่าเริ่มต้น
ดังที่กล่าวไว้ในการตอบกลับอื่น ๆ คุณต้องเพิ่มพารามิเตอร์พิเศษให้กับฟังก์ชันnext
หากคุณต้องการหลีกเลี่ยงข้อยกเว้นที่เกิดขึ้นเมื่อเงื่อนไขไม่เป็นจริง
สไตล์"ใช้งานได้" :
next(filter(lambda i: i == 1000, range(100000000)), False)
สไตล์"ความเข้าใจ" :
ด้วยสไตล์นี้คุณต้องล้อมรอบนิพจน์ความเข้าใจด้วย()
เพื่อหลีกเลี่ยงSyntaxError: Generator expression must be parenthesized if not sole argument
:
next((i for i in range(100000000) if i == 1000), False)