Bir listede / grupta ikili arama yapan ve bulunursa öğenin konumunu döndüren ve yoksa 'False' (-1, None, vb.) Yapan bir kütüphane işlevi var mı?
Ben bisect_left / right işlevlerini bisect modülünde buldum , ancak öğe listede olmasa bile yine de bir konum döndürüyorlar . Amaçlanan kullanım için mükemmel bir şey, ancak sadece bir öğenin listede olup olmadığını bilmek istiyorum (hiçbir şey eklemek istemiyorum).
Kullanmayı bisect_left
ve sonra o pozisyondaki öğenin aradığım şeye eşit olup olmadığını kontrol etmeyi düşündüm , ancak bu hantal görünüyor (ve ayrıca numaraların listemdeki en büyük sayıdan daha büyük olup olmadığını kontrol etmem gerekiyor). Daha güzel bir yöntem varsa bunu bilmek isterim.
Düzenleme Bunun için neye ihtiyacım olduğunu açıklığa kavuşturmak için: Bunun için çok uygun bir sözlük olduğunun farkındayım, ancak bellek tüketimini mümkün olduğunca düşük tutmaya çalışıyorum. Amaçladığım kullanım bir tür çift yönlü arama tablosu olurdu. Tabloda bir değerler listesi var ve ben onların indeks dayalı değerlere erişmek gerekir. Ve ayrıca değer listede yoksa belirli bir değerin dizinini veya Yok'u bulmak istiyorum.
Bunun için bir sözlük kullanmak en hızlı yol olacaktır, ancak (yaklaşık olarak) bellek gereksinimlerini iki katına çıkarır.
Bu soruyu Python kütüphanelerinde göz ardı edebileceğimi düşünerek soruyordum. Moe'nın önerdiği gibi, kendi kodumu yazmam gerekecek gibi görünüyor.
np.searchsorted
faydalıdır. docs.scipy.org/doc/numpy/reference/generated/…