ฉันคิดว่าสิ่งที่ดีที่สุดที่คุณจะทำได้คือบรรจุพวกมันไว้ในสิ่งอันดับ:
if (a, b) == (x, y) or (a, b) == (y, x)
หรืออาจห่อในการค้นหาชุด
if (a, b) in {(x, y), (y, x)}
เนื่องจากมีการพูดถึงความคิดเห็นสองสามครั้งฉันจึงกำหนดเวลาไว้และ tuples และชุดปรากฏขึ้นเพื่อทำงานเหมือนกันที่นี่เมื่อการค้นหาล้มเหลว:
from timeit import timeit
x = 1
y = 2
a = 3
b = 4
>>> timeit(lambda: (a, b) in {(x, y), (y, x)}, number=int(5e7))
32.8357742
>>> timeit(lambda: (a, b) in ((x, y), (y, x)), number=int(5e7))
31.6169182
แม้ว่า tuples จะเร็วขึ้นจริงเมื่อค้นหาสำเร็จ:
x = 1
y = 2
a = 1
b = 2
>>> timeit(lambda: (a, b) in {(x, y), (y, x)}, number=int(5e7))
35.6219458
>>> timeit(lambda: (a, b) in ((x, y), (y, x)), number=int(5e7))
27.753138700000008
ฉันเลือกที่จะใช้ชุดเพราะฉันทำการค้นหาความเป็นสมาชิกและแนวความคิดชุดที่เหมาะสำหรับกรณีการใช้งานที่ดีกว่า tuple หากคุณวัดความแตกต่างอย่างมีนัยสำคัญระหว่างโครงสร้างทั้งสองในกรณีการใช้งานเฉพาะให้ไปกับโครงสร้างที่เร็วกว่า ฉันไม่คิดว่าประสิทธิภาพเป็นปัจจัยที่นี่
x,y, a,b
: พวกเขา ints / ลอย / สตริงวัตถุโดยพลการหรืออะไร หากเป็นประเภท builtin และเป็นไปได้ที่จะเก็บทั้งสองx,y
และa,b
เรียงลำดับแล้วคุณสามารถหลีกเลี่ยงสาขาที่สอง โปรดทราบว่าการสร้างชุดจะทำให้องค์ประกอบทั้งสี่นั้นx,y, a,b
ถูกแฮชซึ่งอาจหรือไม่เล็กน้อยหรือมีความหมายด้านประสิทธิภาพขึ้นอยู่กับประเภทของวัตถุ