Liste göz önüne alındığında, içinde ['a','ab','abc','bac']bulunan dizelerle bir liste hesaplamak istiyorum 'ab'. Yani sonuç ['ab','abc']. Bu Python'da nasıl yapılabilir?
Yanıtlar:
Bu basit filtreleme, Python ile pek çok şekilde gerçekleştirilebilir. En iyi yaklaşım, "liste anlamalarını" aşağıdaki gibi kullanmaktır:
>>> lst = ['a', 'ab', 'abc', 'bac']
>>> [k for k in lst if 'ab' in k]
['ab', 'abc']
Başka bir yol da filterişlevi kullanmaktır . Python 2'de:
>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
Python 3'te bir liste yerine bir yineleyici döndürür , ancak onu çevirebilirsiniz:
>>> list(filter(lambda k: 'ab' in k, lst))
['ab', 'abc']
Anlamak daha iyi bir uygulama olsa da.
lambdamükemmel bir arkadaş değil filtermi? Sadece abverilen listede olup olmadığını kontrol etmek için ayrı bir işlev yazmanın aşırı bir şey olduğunu düşünüyorum . Bu yüzden, inoperatörü temelde saran daha genel bir işlev yazmaktır . Burada filterolmadan daha net bir şekilde nasıl kullanırsınız lambda?
[x for x in L if 'ab' in x]
# To support matches from the beginning, not any matches:
items = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'
filter(lambda x: x.startswith(prefix), items)
Bunu etkileşimli kabukta çabucak denedim:
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
Bu neden işe yarıyor? Çünkü inoperatör ortalama için dizeleri için tanımlanmıştır: "nin alt dize olduğunu".
Ayrıca, yukarıda kullanılan liste anlama sözdizimini kullanmak yerine döngüyü yazmayı düşünebilirsiniz :
l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
if 'ab' in s:
result.append(s)
mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist