Zincirleme Karşılaştırmayı Basitleştirin


256

Bir tamsayı değeri var xve ben bir startve enddeğerleri arasında olup olmadığını kontrol etmek gerekir , bu yüzden aşağıdaki ifadeleri yazıyorum:

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

Bu ifadenin altı çiziliyor ve araç ipucu bana yapmam gerektiğini söylüyor

zincirleme karşılaştırmayı basitleştirin

Anlayabildiğim kadarıyla, bu karşılaştırma geldikleri kadar basit. Burada ne kaçırdım?


1
Araç ipucundan bir öneri alırsanız, alanı fareyle üzerine getirebilirsiniz ve size biraz ampul verir. Üzerine tıklayabilir ve önerdiği değişikliği otomatik olarak eklemesini sağlayabilirsiniz. Böylece ne yapmanız gerektiğini düşündüğünüzü görebilirsiniz (ve beğenmediyseniz Geri alabilirsiniz).
Edward Ned Harvey

Yanıtlar:


434

Python'da karşılaştırma işlemlerini "zincirleyebileceksiniz", bu da sadece birlikte oldukları ve "birlikte" oldukları anlamına gelir. Sizin durumunuzda şöyle olur:

if start <= x <= end:

Referans: https://docs.python.org/3/reference/expressions.html#comparisons


2
Teşekkürler, bunu Python'da yapabileceğini bilmiyordum. Bu konuda gerçekten başımı kaşıyordu.
Brynn McCullagh

18
Adamım işte böyle olmalı. Ama diğer dillerden geldiğinizde ideallerinizi unutuyorsunuz ve düşünmüyorsunuz ki, şeyler olması gerektiği gibi olabilir. Ama bu yüzden python tam olarak böyle şeyler yüzünden şaşırtıcı :)
Hakaishin

Zincirleme tarzı diğerine tavsiye eden herhangi bir "resmi" kaynak biliyor musunuz? Hangisi daha "deyimsel" Python?
Ray

Bilmiyorum, bazen python'un daha fazla korkuluk atmasını isterdim. x, y, z Pandalar serisi olduğunda x == y == z ValueError ile başarısız olur
BallpointBen

@BallpointBen: Pek çok şey Pandas'ta beklediğiniz gibi çalışmıyor, hatta değil x == y and y == z.
John Zwinck

12

Şu şekilde yeniden yazılabilir:

start <= x <= end:

Veya:

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

5
Geniş başlangıç ​​ve bitiş için gereksiz bir liste oluşturduğunuz için aralık kötü bir seçimdir.
Burhan Khalid

1
@BurhanKhalid Gerçekten, ama sanırım OP için bahsetmeye değer.
Maroun

7
Python3 içinde, aralık tutamaçları güzel bir şekilde " içerir ", dolayısıyla liste oluşturulmaz.
JoshNahum

2
@MarounMaroun python 3'ten beri, aralık işlevi eski xrange gibi davranıyor, ayrıca söz etmeye değer
dvdvck

5
Kullanımıyla ilgili ayrıntılar için if x in range(...)bkz. " Python 3'te neden“ 1000000000000000 (1000000000000001) aralığında bu kadar hızlı? ””.
Kevin J. Chase

-4

Kodun basitleştirilmesi

if start <= x <= end: # start x is between start and end 
# do stuff

9
Bunun bu cevaptan farkı nedir?
GWigWam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.