Kiểm tra xem danh sách các đối tượng có chứa một đối tượng có giá trị thuộc tính nhất định không


104

Tôi muốn kiểm tra xem danh sách các đối tượng của mình có chứa một đối tượng có giá trị thuộc tính nhất định hay không.

class Test:
    def __init__(self, name):
        self.name = name

# in main()
l = []
l.append(Test("t1"))
l.append(Test("t2"))
l.append(Test("t2"))

Tôi muốn một cách để kiểm tra xem danh sách có chứa một đối tượng có tên hay không "t1". Nó được hoàn thiện bằng cách nào? Tôi đã tìm thấy https://stackoverflow.com/a/598415/292291 ,

[x for x in myList if x.n == 30]               # list of all matches
any(x.n == 30 for x in myList)                 # if there is any matches
[i for i,x in enumerate(myList) if x.n == 30]  # indices of all matches

def first(iterable, default=None):
    for item in iterable:
        return item
    return default

first(x for x in myList if x.n == 30)          # the first match, if any

Tôi không muốn xem toàn bộ danh sách mỗi lần, tôi chỉ cần biết nếu có 1 trường hợp phù hợp. Liệu first(...)hoặc any(...)điều gì khác sẽ làm điều đó?


Các first()chức năng có sẵn như là một built-in gọi next().
Sven Marnach 21/02/12

Câu trả lời:


169

Như bạn có thể dễ dàng nhìn thấy từ tài liệu , any()hàm đoản mạch sẽ trả về Truengay sau khi tìm thấy khớp.

any(x.name == "t2" for x in l)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.