Допустим, у нас есть два списка
list1 = [1, 3, 5, 7, 9]
list2 = [1, 2, 3, 4, 5]
. Из приведенных выше двух списков видно, что пункты 1, 3, 5 существуют в списке 2, а пункты 7, 9 - нет.С другой стороны, пункты 1, 3, 5 существуют в списке 1, а пункты 2, 4 - нет.
Как лучше всего вернуть новый список, содержащий пункты 7, 9 и 2, 4?
Все ответы, приведенные выше, находят решение, а теперь какое самое оптимальное?
def difference(list1, list2):
new_list = []
for i in list1:
if i not in list2:
new_list.append(i)
for j in list2:
if j not in list1:
new_list.append(j)
return new_list
против
def sym_diff(list1, list2):
return list(set(list1).symmetric_difference(set(list2)))
Используя время, мы можем видеть результаты
t1 = timeit.Timer("difference(list1, list2)", "from __main__ import difference,
list1, list2")
t2 = timeit.Timer("sym_diff(list1, list2)", "from __main__ import sym_diff,
list1, list2")
print('Using two for loops', t1.timeit(number=100000), 'Milliseconds')
print('Using two for loops', t2.timeit(number=100000), 'Milliseconds')
возвращает
[7, 9, 2, 4]
Using two for loops 0.11572412995155901 Milliseconds
Using symmetric_difference 0.11285737506113946 Milliseconds
Process finished with exit code 0