İnsanların anylistede 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 anylistede 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
>>>
TrueBir liste, bir öğenin herhangi bir sayıda tekrarını Falseiç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 indexdöndürülür ve -1varsa öğenin dizinini döndürür. Alternatif olarak, bir ififadede 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
indexYöntem dönmez -1 elemanı mevcut değilse, bir atar ValueErrordurum.