it-swarm-vi.com

Có một chức năng chứa ngắn cho danh sách?

Tôi thấy mọi người đang sử dụng any để thu thập một danh sách khác để xem liệu một mục có tồn tại trong danh sách không, nhưng có cách nào nhanh chóng để làm không?:

if list.contains(myItem):
    # do something
431
Joan Venge

Bạn có thể sử dụng cú pháp này:

if myItem in list:
    # do something

Ngoài ra, toán tử nghịch đảo:

if myItem not in list:
    # do something

Nó hoạt động tốt cho danh sách, bộ dữ liệu, bộ và ký tự (phím kiểm tra).

Lưu ý rằng đây là thao tác O(n) trong danh sách và bộ dữ liệu, nhưng hoạt động O(1) theo bộ và dicts.

746
defuz

Ngoài những gì người khác đã nói, bạn cũng có thể quan tâm để biết rằng những gì in làm là gọi phương thức list.__contains__, mà bạn có thể định nghĩa trên bất kỳ lớp nào bạn viết và có thể cực kỳ tiện dụng để sử dụng python ở mức độ đầy đủ.

Một cách sử dụng ngu ngốc có thể là:

>>> class ContainsEverything:
    def __init__(self):
        return None
    def __contains__(self, *elem, **k):
        return True


>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>         
60
Ant

Gần đây tôi đã nghĩ ra một lớp lót này để nhận True nếu một danh sách chứa bất kỳ số lần xuất hiện của một mặt hàng, hoặc False nếu nó không có sự xuất hiện hoặc không có gì cả. Việc sử dụng next(...) mang lại giá trị trả về mặc định này (False) và có nghĩa là nó sẽ chạy nhanh hơn đáng kể so với việc chạy toàn bộ danh sách.

list_does_contain = next((True for item in list_to_test if item == test_item), False)

5
Dustin Raimondi

Phương thức danh sách index sẽ trả về -1 nếu mục không có mặt và sẽ trả về chỉ mục của mục trong danh sách nếu có. Ngoài ra, trong câu lệnh if, bạn có thể làm như sau:

if myItem in list:
    #do things

Bạn cũng có thể kiểm tra nếu một phần tử không có trong danh sách với câu lệnh if sau:

if myItem not in list:
    #do things
3
Mr. Squig