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?
104
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 filter
fungsi 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.
lambda
teman yang sempurna untukfilter
kasus ini? Saya pikir menulis fungsi terpisah hanya untuk memeriksa apakahab
ada dalam daftar yang diberikan adalah berlebihan. Begitu juga menulis fungsi yang lebih umum yang pada dasarnya membungkusin
operator. Bagaimana Anda akan menggunakanfilter
dengan cara yang lebih jelas tanpa dilambda
sini?[x for x in L if 'ab' in x]
sumber
# To support matches from the beginning, not any matches: items = ['a', 'ab', 'abc', 'bac'] prefix = 'ab' filter(lambda x: x.startswith(prefix), items)
sumber
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
in
operator 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)
sumber
mylist = ['a', 'ab', 'abc'] assert 'ab' in mylist
sumber