Diberikan daftar ['a','ab','abc','bac'], saya ingin menghitung daftar dengan string yang ada 'ab'di dalamnya. Yaitu hasilnya ['ab','abc']. Bagaimana ini bisa dilakukan dengan Python?
Jawaban:
Pemfilteran sederhana ini dapat dicapai dengan banyak cara dengan Python. Pendekatan terbaik adalah dengan menggunakan "pemahaman daftar" sebagai berikut:
>>> lst = ['a', 'ab', 'abc', 'bac']
>>> [k for k in lst if 'ab' in k]
['ab', 'abc']
Cara lain adalah dengan menggunakan filterfungsi tersebut. Dengan Python 2:
>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
Di Python 3, ini mengembalikan iterator, bukan daftar, tetapi Anda dapat mentransmisikannya:
>>> list(filter(lambda k: 'ab' in k, lst))
['ab', 'abc']
Meskipun lebih baik menggunakan pemahaman.
lambdateman yang sempurna untuk filterkasus ini? Saya pikir menulis fungsi terpisah hanya untuk memeriksa apakah abada dalam daftar yang diberikan adalah berlebihan. Begitu juga menulis fungsi yang lebih umum yang pada dasarnya membungkus inoperator. Bagaimana Anda akan menggunakan filterdengan cara yang lebih jelas tanpa di lambdasini?
[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)
Mencoba ini dengan cepat di shell interaktif:
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
Mengapa ini berhasil? Karena inoperator didefinisikan untuk string berarti: "adalah substring dari".
Selain itu, Anda mungkin ingin mempertimbangkan untuk menulis perulangan daripada menggunakan sintaks pemahaman daftar yang digunakan di atas:
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