Я наткнулся на следующий код для удаления дубликатов из списка:
seen = set(); print [i for i in list if i not in seen and not seen.add(i)]
Я не мог понять, что именно.и не видел.add(i)"эта часть кода работает какпомощь(установить.добавить)дает ниже объяснение:
add(...)
Add an element to a set.
This has no effect if the element is already present.
С нетерпением жду вашей помощи в понимании этого.
решение1
Списочное включение перебирает значения исходного/входного списка. Мы хотим, чтобы значение было добавлено в новый/выходной список, если и только если оно еще не было просмотрено, отсюда и условное выражение if i not in seen
. Когда новое значение добавляется в новый/выходной список, seen
набор должен быть обновлен, отсюда и seen.add(i)
вызов функции. Однако set.add()
метод возвращает None
, что вычисляется как False
. Поэтому not
оператор добавляется, так что not seen.add(i)
всегда возвращает True
.