Ở đây tôi đang so sánh hiệu suất của tất cả các câu trả lời được đề cập ở đây. Như mong đợi, hoạt động dựa trên Arkku set
là nhanh nhất.
Sự khác biệt của Arkku - Đầu tiên (0,125 usec mỗi vòng)
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
Danh sách toàn diện của Daniel Pryden với set
tra cứu - Thứ hai (0,02 usec mỗi vòng)
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
Hiểu danh sách của Donut trên danh sách đơn giản - Thứ ba (0,552 usec mỗi vòng lặp)
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
Sử dụng Moinuddin Quadrifilter
- Thứ tư (0,972 usec mỗi vòng)
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 sử dụng kết hợp reduce
+filter
- Thứ năm (3,97 usec mỗi vòng)
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