ลดความซับซ้อนของการเปรียบเทียบที่ถูกล่ามโซ่


254

ฉันมีค่าจำนวนเต็มxและฉันต้องตรวจสอบว่าเป็นระหว่างstartและendค่าดังนั้นฉันเขียนคำสั่งต่อไปนี้:

if x >= start and x <= end:
    # do stuff

คำสั่งนี้ขีดเส้นใต้และคำแนะนำเครื่องมือบอกฉันว่าฉันต้อง

ลดความซับซ้อนของการเปรียบเทียบที่ถูกผูกมัด

เท่าที่ฉันจะบอกได้ว่าการเปรียบเทียบนั้นง่ายพอ ๆ กับที่พวกเขามา ฉันพลาดอะไรไปที่นี่


1
หากคุณได้รับคำแนะนำจากคำแนะนำเครื่องมือคุณสามารถวางเมาส์เหนือพื้นที่และให้หลอดไฟเล็กน้อย คุณสามารถคลิกที่มันและให้มันแทรกการเปลี่ยนแปลงที่แนะนำโดยอัตโนมัติ ดังนั้นคุณสามารถเห็นสิ่งที่คิดว่าคุณควรจะทำ (และคุณสามารถเลิกทำถ้าคุณไม่ชอบมัน)
เอ็ดเวิร์ดเน็ดฮาร์วีย์

คำตอบ:


432

ใน Python คุณสามารถ"เปรียบเทียบ" การดำเนินการเปรียบเทียบซึ่งหมายถึงว่ามันเป็น "และ" ed เข้าด้วยกัน ในกรณีของคุณมันจะเป็นอย่างนี้:

if start <= x <= end:

การอ้างอิง: https://docs.python.org/3/reference/expressions.html#comparisons


2
ขอบคุณฉันไม่รู้ว่าคุณสามารถทำได้ใน Python เกาหัวของฉันลงบนอันนี้จริงๆ
Brynn McCullagh

18
ผู้ชายนี่คือสิ่งที่ควรจะเป็น แต่มาจากภาษาอื่นที่คุณลืมอุดมคติของคุณและอย่าคิดว่าสิ่งต่าง ๆ จะเป็นอย่างที่ควรจะเป็น แต่นี่คือเหตุผลที่หลามเป็นที่น่าอัศจรรย์ว่าเพราะสิ่งนั้น :)
Hakaishin

คุณรู้จักแหล่งข้อมูล "ทางการ" ใด ๆ ที่แนะนำรูปแบบที่ถูกผูกมัดอยู่เหนือแหล่งอื่นหรือไม่? งูหลามแบบ "สำนวน" อันไหนที่มากกว่า?
เรย์

ฉันไม่รู้ว่าบางครั้งฉันก็หวังว่าหลามจะเพิ่มการ์ดคุ้มกันให้มากขึ้น x == == Y Z ล้มเหลวด้วย ValueError เมื่อ x, y, z เป็นนุ่นชุด
BallpointBen

@BallpointBen: x == y and y == zจำนวนมากสิ่งที่ไม่ได้ทำงานในแบบที่คุณอาจคาดหวังในนุ่นไม่ได้
John Zwinck

12

สามารถเขียนใหม่เป็น:

start <= x <= end:

หรือ:

r = range(start, end + 1) # (!) if integers
if x in r:
    ....

5
ช่วงนี้เป็นตัวเลือกที่ไม่ดีเพราะสำหรับการเริ่มต้นและสิ้นสุดที่มีขนาดใหญ่คุณกำลังสร้างรายการที่ไม่จำเป็น
Burhan Khalid

1
@BurhanKhalid แน่นอน แต่ฉันคิดว่ามันคุ้มค่าที่จะพูดถึง OP
Maroun

7
ใน python3 ช่วงจับ " ประกอบด้วย " เป็นอย่างดีดังนั้นจึงไม่มีการสร้างรายการ
JoshNahum

2
@ MarounMaroun ตั้งแต่ python 3 ฟังก์ชั่น range ทำงานเหมือน xrange ในอดีตมันก็คุ้มค่าที่จะกล่าวถึงด้วย
dvdvck

5
สำหรับรายละเอียดเกี่ยวกับการใช้งานif x in range(...)ให้ดูที่ " เพราะเหตุใด“ 1000000000000000 ในช่วง (1000000000000001)” จึงรวดเร็วใน Python 3 "
Kevin J. Chase

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