İlk sorunuza gelince: bu kod gayet iyi durumdadır ve item
içindeki öğelerden birine eşitse çalışmalıdır myList
. Belki de öğelerden biriyle tam olarak eşleşmeyen bir dize bulmaya çalışıyorsunuz ya da yanlışlıktan muzdarip bir kayan nokta değeri kullanıyorsunuzdur.
İkinci sorunuza gelince: Listelerdeki şeyleri "bulmanın" birkaç yolu var.
İçeride bir şey olup olmadığını kontrol etme
Tanımladığınız kullanım durumu budur: Listenin içinde bir şey olup olmadığını kontrol etme. Bildiğiniz gibi, in
bunun için operatörü kullanabilirsiniz :
3 in [1, 2, 3] # => True
Bir koleksiyona filtre uygulama
Yani, belirli bir koşulu karşılayan bir sırayla tüm öğeleri bulmak. Bunun için liste kavrama veya jeneratör ifadeleri kullanabilirsiniz:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
İkincisi, sadece yinelediğiniz anda oluşturulacak bir tür tembel liste olarak hayal edebileceğiniz bir jeneratör döndürecektir . Bu arada, birincisi tam olarak
matches = filter(fulfills_some_condition, lst)
Burada üst düzey işlevleri iş başında görebilirsiniz. Python 3'te filter
bir liste değil, jeneratör benzeri bir nesne döndürür.
İlk olayı bulma
Yalnızca bir koşulla eşleşen ilk şeyi istiyorsanız (ancak henüz ne olduğunu bilmiyorsanız), bir for döngüsü kullanmak (muhtemelen else
iyi bilinmeyen bir maddeyi de kullanmak) iyidir . Ayrıca kullanabilirsiniz
next(x for x in lst if ...)
ilk eşleşmeyi döndürür veya StopIteration
bulunmazsa a değerini yükseltir . Alternatif olarak,
next((x for x in lst if ...), [default value])
Bir öğenin yerini bulma
Listelerde, belirli bir öğenin listede neredeindex
olduğunu bilmek istiyorsanız bazen yararlı olabilecek bir yöntem de vardır :
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Ancak, kopyalarınız varsa .index
her zaman en düşük dizini döndürdüğünü unutmayın : ......
[1,2,3,2].index(2) # => 1
Kopyalar varsa ve tüm dizinleri istiyorsanız, enumerate()
bunun yerine kullanabilirsiniz :
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.