Hem sayı hem de harf içeren bir liste var diyelim. Listenin belirli bir öğe içermediğini öğrenmenin hızlı bir yolu var mı? Onu şartlarda kullanmayı planlıyorum.Python, bir listenin belirli bir öğesinin bulunmadığını öğrenin
cevap
Belki
3 not in [1, 2, "a"]
# True
Not: Bir dict tuşları gibi öğeleri koyabilirsiniz Eğer üyelik için test karma algoritması çok daha hızlı sayesindedir. Sadece listeniz çok uzunsa veya uygulamanız çok fazla şey yapsa sorun olur. Aksi halde, Sven'in dediği gibi, "Y'de X değil".
any(isinstance(x, int) for x in alist)
:
Bu durumda bir set de kullanabilirsiniz. –
Dikkate alınan değerler için kullanmadığınız bir takımı * kullanmanız gerekir *. – FogleBird
sen (Sven Marnach tarafından)
bool([x for x in alist if isinstance(x, int)])
daha iyi versiyonunu demek?
Eğer OP'nin istediği bu gerçekten buysa, bunu alisteki x için herhangi bir (isinstance (x, int)) olarak yazmak daha iyi olurdu, çünkü bu daha özlü ve ilk int üzerinde yinelemeyi durdurur. Ama bunun ne istediğini sanmıyorum. –
Haklısınız. Düzenledim;) – Ant
Ne yapmaya çalıştığınıza bağlı olarak değişir. Hız önemli değilse, o zaman lst içinde kullanın. Eğer önemli bir konu varsa, listenizi önce farklı bir veri yapısına (örneğin, söylenecekler listesindeki öğeleri arayacaksınız), büyüklüğüne, vb. Dönüştürmenize bağlı olup olmadığınıza bağlı olacaktır.
Bir fikir vermek için :
import timeit
a = range(10000)
da = dict(zip(a, [None for i in a]))
def list_first():
return 0 in a
def dict_first():
return 0 in da
def list_last():
return 9999 in a
def dict_last():
return 9999 in da
if __name__ == "__main__":
for f in ["list_first", "dict_first", "list_last", "dict_last"]:
t = timeit.Timer("%s()" % f, setup="from __main__ import %s" % f)
print min(t.repeat(number=10000))
Bu bana verir:
Eğer beklendiği gibi, işleri hızlandırmak olmayan bir dict kullanarak, listenin başında olan bir öğe için bakarsak0.00302004814148
0.00318598747253
4.21943712234
0.004145860672
. Sonunda bir öğe ararsanız, o zaman beklendiği gibi farklılık çok önemlidir (3 mertebeden): dict kullanımı karma, listeler her öğeyi birbiri ardına aramaya ihtiyaç duyar.
Öğeler karşılaştırılabilirse, sıranızı sıralayarak ve bir ikili arama (N yerine log (N) yerine, N (log) (N) N yerine O (1) ile karşılaştırıldığında nispeten hızlı bir şekilde büyük bir hız elde edebilirsiniz. python için uygulamada çok büyük veya daha gelişmiş yapılar (ikili arama ağacı, vb ...) kullanıyor. Oldukça karmaşık olabilir - hızlı arama için veri yapıları her şeyden önce CS'de en çok çalışılan sorunlardan biridir.
Kodunuzun küme kümelerini kullanarak daha kısa bir versiyonunu burada bulabilirsiniz: https://gist.github.com/742056. Özellikle yapıcınız 'timeit.Timer' çağrısı biraz verbose görünüyor :) –
- 1. Belirli bir makinede belirli bir makinede bir hizmet bulunup bulunmadığını kontrol edin
- 2. Python jinja2 şablonu, bir listenin nasıl sayılacağı
- 3. Bir listenin bir öğe içermediğini nasıl anlarsınız?
- 4. Python-XML: Belirli bir etiketin bulunup bulunmadığını kontrol edip devam edilsin mi?
- 5. Listenin değerini, mysql Python
- 6. Newtonsoft.Json.Linq.JArray öğesinin belirli bir nesne türüne dönüştürülmesi
- 7. Python - belirli bir değere set aralığı
- 8. Python ile İngilizce metnin okunup bulunmadığını saptayın
- 9. Bir açılır listenin öğesinin Meteor'daki bir koleksiyondaki bir değişkenden nasıl doldurulur?
- 10. ListDeleteValue - Listenin Bir Parçası Kaldır
- 11. Bir NSMutableArray öğesinin belirli bir dizinine nesne eklenmesi
- 12. HTML öğesini, bir BODY öğesinin belirli bir sınıfından hedefleme
- 13. Haskell: listenin belirli bir "alt liste" içerip içermediğini sınama
- 14. Ödevdeki listenin Python derin kopyası
- 15. Bir Listenin değişken öğeleri
- 16. python: listenin zip kesilmesini önleme
- 17. Python - Belirli bir karakterden sonra belirli bir alanı kaldırın.
- 18. Çantada bir eleman bulunup bulunmadığını kontrol edin.
- 19. Karınca kullanarak, bir dosyada belirli bir dizenin bulunup bulunmadığını kontrol edin
- 20. Rastgele listenin Python listesi (veya dict)
- 21. Bir NSArray öğesinin değerini
- 22. Python bir listenin iç içe geçmiş olup olmadığını kontrol edin
- 23. Python değiştirilemez türler: YokTüm()> int() bir listenin maksimumunu bulurken
- 24. Listenin bir öğesinin bir liste olup olmadığı nasıl kontrol edilir (Python'da)?
- 25. Bir öğenin öğesinin ListView
- 26. Scala'da bir listenin n-th öğesine eşleşme
- 27. Bir web sayfasını, hangi tuşa basıldığına bağlı olarak bir listenin belirli bir kısmına götüren JavaScript
- 28. piton - Bir listenin içeriğini yazdırılır
- 29. Listenin herhangi bir öğesi dize ile başlıyorsa?
- 30. Java.util.calendar öğesinin ileride belirli bir zaman dilimi için ayarlanması
Bir tuple daha iyi olmaz mıydı? – user225312
@A A: OP bir öğenin listede olup olmadığını kontrol etmeyi istedi. Muhtemelen bu liste kodunda kodlanmış olmayacaktır. –