İnsanların any
listede bir öğe olup olmadığını görmek için başka bir liste toplamak için kullandıklarını görüyorum, ancak bunu yapmanın hızlı bir yolu var mı ?:
if list.contains(myItem):
# do something
İnsanların any
listede bir öğe olup olmadığını görmek için başka bir liste toplamak için kullandıklarını görüyorum, ancak bunu yapmanın hızlı bir yolu var mı ?:
if list.contains(myItem):
# do something
Yanıtlar:
Bu sözdizimini kullanabilirsiniz:
if myItem in list:
# do something
Ayrıca, ters operatör:
if myItem not in list:
# do something
Listeler, tuples, setler ve dikmeler için iyi çalışır (onay tuşları).
Not Bu listeler ve küpe bir O (n) bir işlemdir, ancak bu setleri ve dicts bir O (1) çalışması.
o='--skip'; o in ("--skip-ias"); # returns True !
("--skip-ias")
Bir tuple değil, bir dize olduğu için eşleşir (parantezler hiçbir şey yapmaz, (1)
tıpkı bir tamsayı gibi). 1 demet istiyorsanız, tek öğeden sonra virgül eklemeniz gerekir: ("--skip-ias",)
(veya (1,)
).
Diğerlerinin söylediklerine ek olarak in
, list.__contains__
yöntemi çağırmanın ne olduğunu, yazdığınız herhangi bir sınıfta tanımlayabileceğinizi ve python'u tam olarak kullanmak için son derece kullanışlı olabileceğini bilmek de ilginizi çekebilir .
Aptal bir kullanım şunlar olabilir:
>>> class ContainsEverything:
def __init__(self):
return None
def __contains__(self, *elem, **k):
return True
>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>
True
Bir liste, bir öğenin herhangi bir sayıda tekrarını False
içeriyorsa veya hiç bir olay veya hiç bir şey içermiyorsa almak için bu tek astarla geldim . Kullanmak next(...)
, buna varsayılan bir dönüş değeri ( False
) verir ve tüm liste kavrayışını çalıştırmaktan çok daha hızlı çalışması gerektiği anlamına gelir.
list_does_contain = next((True for item in list_to_test if item == test_item), False)
any(item == test_item for item in list_to_test)
Ben de işe yarayacağını düşünüyorum.
Öğe yoksa liste yöntemi index
döndürülür ve -1
varsa öğenin dizinini döndürür. Alternatif olarak, bir if
ifadede aşağıdakileri yapabilirsiniz:
if myItem in list:
#do things
Ayrıca, bir öğenin aşağıdaki if ifadesine sahip bir listede olmadığını kontrol edebilirsiniz:
if myItem not in list:
#do things
index
Yöntem dönmez -1 elemanı mevcut değilse, bir atar ValueError
durum.