Метод поиска определен в списке, и единственный способ поиска в неупорядоченном списке - , итерирующий (конечно, порядок, в котором итерация произвольная, но нет причин использовать другую для другой тип данных, тем более, что вы можете поместить объекты с разными типами в один и тот же список).
Так что список в основном не знают, какие элементы в нем, и перебирает список, как:
# basic implementation of linear search
def __contains__(self, item):
for elem in self:
if item == elem:
return True
return False
Теперь единственное, что отличает это ==
метод (и, таким образом, лежащий в основе __eq__
). В самом деле: равенство int может быть рассчитано более эффективно, так как обычно 32 или 64 бита можно сравнить сразу (так как обычно это работает на процессоре). Это в отличие от строк, где один выполняет итерации над символами. Таким образом, проверки равенства над int
s быстрее, чем те, что над str
.
Наконец, вы можете кодировать двоичные числа, более компактные по целому числу. Например, 1110
(двоичный) эквивалентен 14
. Вам не нужно делать математику самостоятельно: как this answer говорит, вы можете просто написать 0b1110
, а Python преобразует его в int 14
.
Метод поиска тот же, метод '__eq__' отличается (и, вероятно, быстрее для целых чисел). –
Я вижу целые числа, я что-то упускаю? Если вы имеете дело с поплавками, вы можете преобразовать строки в поплавки и проверить эквивалентность в пределах ошибки округления, заданной с точностью, которую вы получаете от строк. –
Я согласен с Виллемом. Кроме того, ваш 'bin_list' не содержит двоичных чисел - это просто целые числа base-10, содержащие только цифры 0 и 1. Если вы хотите представить двоичное число, используйте префикс' 0b' –