Đối với container built-in python (list
, tuple
, vv) các nhà điều hành in
tương đương với any(y == item for item in container)
với sự báo trước rằng phương pháp cũ là nhanh hơn (và đẹp hơn):Danh sách python có tương đương với __contains__ để kiểm tra danh tính không?
In [13]: container = range(10000)
In [14]: %timeit (-1 in container)
1000 loops, best of 3: 241 us per loop
In [15]: %timeit any(-1 == item for item in container)
1000 loops, best of 3: 1.2 ms per loop
Có một tương đương với any(y is item for item in container)
? Đó là, một thử nghiệm sử dụng is
thay vì ==
?
Trong thực tế, tôi đã luôn luôn coi nó là một lỗ hổng tài liệu mà các phương pháp 'list.index' và' list.count' vv nói điều gì đó để tác động " Trả về chỉ mục trong danh sách mục đầu tiên có giá trị * là * x. Đó là lỗi nếu không có mục nào " – mgilson
Nhưng ngay cả với các bộ,' in' kiểm tra giá trị băm không * đảm bảo * rằng các đối tượng khác nhau. xem xét 'a = (1,2,3); c = (1,2,3); c là a; s = set ([a]); c trong s'. Mặc dù, hiện tại, tôi không thể nghĩ ra một thời điểm mà điều này sẽ quan trọng. – mgilson
Không, chỉ cần chỉ ra rằng toán tử 'in' trên tập hợp và dấu gạch ngang không có * quét *. –