Alternatif olarak, istenen sonucu elde etmek için lambda ifadesi ile de kullanabilirsinizfilter
. Örneğin:
>>> l1 = [1,2,6,8]
>>> l2 = set([2,3,5,8])
# v `filter` returns the a iterator object. Here I'm type-casting
# v it to `list` in order to display the resultant value
>>> list(filter(lambda x: x not in l2, l1))
[1, 6]
Performans karşılaştırması
Burada, burada bahsedilen tüm cevapların performansını karşılaştırıyorum. Beklendiği gibi, Arkku'nun set
operasyonu en hızlı.
Arkku'nun Set Farkı - İlk (döngü başına 0.124 usec)
mquadri$ python -m timeit -s "l1 = set([1,2,6,8]); l2 = set([2,3,5,8]);" "l1 - l2"
10000000 loops, best of 3: 0.124 usec per loop
Daniel Pryden'in set
Arama ile Liste Anlayışı - İkinci (döngü başına 0.302 usec)
mquadri$ python -m timeit -s "l1 = [1,2,6,8]; l2 = set([2,3,5,8]);" "[x for x in l1 if x not in l2]"
1000000 loops, best of 3: 0.302 usec per loop
Düz Listedeki Donut List Anlayışı - Üçüncü (döngü başına 0,552 usec)
mquadri$ python -m timeit -s "l1 = [1,2,6,8]; l2 = [2,3,5,8];" "[x for x in l1 if x not in l2]"
1000000 loops, best of 3: 0.552 usec per loop
Moinuddin Quadri kullanımıfilter
- Dördüncü (döngü başına 0,972 usec)
mquadri$ python -m timeit -s "l1 = [1,2,6,8]; l2 = set([2,3,5,8]);" "filter(lambda x: x not in l2, l1)"
1000000 loops, best of 3: 0.972 usec per loop
Akshay Hazari, reduce
+filter
- Beşinci (döngü başına 3,97 usec) kombinasyonunu kullanıyor
mquadri$ python -m timeit "l1 = [1,2,6,8]; l2 = [2,3,5,8];" "reduce(lambda x,y : filter(lambda z: z!=y,x) ,l1,l2)"
100000 loops, best of 3: 3.97 usec per loop
PS: set
sırası korumaz ve yinelenen öğeleri listeden kaldırır. Bu nedenle, bunlardan herhangi birine ihtiyacınız varsa set farkını kullanmayın .