Hướng dẫn how do you search objects in python? - làm thế nào để bạn tìm kiếm các đối tượng trong python?

Giả sử tôi đang tạo một lớp đơn giản để hoạt động tương tự như cấu trúc kiểu C, chỉ giữ các yếu tố dữ liệu. Tôi đang cố gắng tìm ra cách tìm kiếm một danh sách các đối tượng cho các đối tượng có thuộc tính bằng một giá trị nhất định. Dưới đây là một ví dụ tầm thường để minh họa những gì tôi đang cố gắng làm.

Ví dụ:

class Data:
    pass

myList = []

for i in range(20):
    data = Data()
    data.n = i
    data.n_squared = i * i
    myList.append(data)

Làm thế nào tôi có thể tìm kiếm danh sách Mylist để xác định xem nó có chứa một phần tử có n == 5 không?

Tôi đã tìm kiếm và tìm kiếm các tài liệu Python, và tôi nghĩ rằng tôi có thể làm điều này với sự hiểu biết danh sách, nhưng tôi không chắc chắn. Tôi có thể nói thêm rằng tôi phải sử dụng Python 2.4.3, vì vậy bất kỳ tính năng Gee-Whiz 2.6 hoặc 3.x mới nào cũng không có sẵn cho tôi.

Hướng dẫn how do you search objects in python? - làm thế nào để bạn tìm kiếm các đối tượng trong python?

DevPlayer

5.1851 Huy hiệu vàng24 Huy hiệu bạc20 Huy hiệu đồng 201 gold badge24 silver badges20 bronze badges

hỏi ngày 28 tháng 2 năm 2009 lúc 18:06Feb 28, 2009 at 18:06

1

Bạn có thể nhận được một danh sách tất cả các yếu tố phù hợp với danh sách hiểu:

[x for x in myList if x.n == 30]  # list of all elements with .n==30

Nếu bạn chỉ đơn giản muốn xác định xem danh sách có chứa bất kỳ yếu tố nào phù hợp và thực hiện nó (tương đối) một cách hiệu quả, bạn có thể làm

def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff

Ali Afshar

40.2K12 Huy hiệu vàng92 Huy hiệu bạc109 Huy hiệu đồng12 gold badges92 silver badges109 bronze badges

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 18:11Feb 28, 2009 at 18:11

Adam Rosenfieldadam RosenfieldAdam Rosenfield

380K96 Huy hiệu vàng508 Huy hiệu bạc585 Huy hiệu Đồng96 gold badges508 silver badges585 bronze badges

3

Đơn giản, thanh lịch và mạnh mẽ:

Một biểu thức máy phát kết hợp với một bản tích hợp (Python 2.5+)

any(x for x in mylist if x.n == 10)

Sử dụng Python

[x for x in myList if x.n == 30]  # list of all elements with .n==30
4 Buildin, được định nghĩa như sau:

Bất kỳ (có thể lặp lại)

[x for x in myList if x.n == 30]  # list of all elements with .n==30
5 trả về đúng nếu bất kỳ yếu tố nào của ITBER là đúng. Tương đương với:
[x for x in myList if x.n == 30]  # list of all elements with .n==30
5 Return True if any element of the iterable is true. Equivalent to:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

Hướng dẫn how do you search objects in python? - làm thế nào để bạn tìm kiếm các đối tượng trong python?

h3xStream

6.0732 Huy hiệu vàng45 Huy hiệu bạc55 Huy hiệu Đồng2 gold badges45 silver badges55 bronze badges

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 20:15Feb 28, 2009 at 20:15

Gahooagahooagahooa

126K12 Huy hiệu vàng92 Huy hiệu bạc99 Huy hiệu Đồng12 gold badges92 silver badges99 bronze badges

3

Chỉ để hoàn thiện, đừng quên điều đơn giản nhất có thể hoạt động:

for i in list:
  if i.n == 5:
     # do something with it
     print "YAY! Found one!"

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 18:20Feb 28, 2009 at 18:20

Hướng dẫn how do you search objects in python? - làm thế nào để bạn tìm kiếm các đối tượng trong python?

Charlie Martincharlie MartinCharlie Martin

108K23 Huy hiệu vàng192 Huy hiệu bạc258 Huy hiệu đồng23 gold badges192 silver badges258 bronze badges

0

[x for x in myList if x.n == 30]               # list of all matches
[x.n_squared for x in myList if x.n == 30]     # property of 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

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 18:19Feb 28, 2009 at 18:19

Markus Jarderotmarkus JarderotMarkus Jarderot

84,8K20 Huy hiệu vàng135 Huy hiệu bạc137 Huy hiệu đồng20 gold badges135 silver badges137 bronze badges

2

filter(lambda x: x.n == 5, myList)

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 18:22Feb 28, 2009 at 18:22

Vartecvartecvartec

128K36 Huy hiệu vàng213 Huy hiệu bạc242 Huy hiệu Đồng36 gold badges213 silver badges242 bronze badges

3

Bạn có thể sử dụng

[x for x in myList if x.n == 30]  # list of all elements with .n==30
6 để tìm kiếm một mục trong bộ sưu tập và danh sách hiểu để trích xuất trường bạn quan tâm. Điều này (hoạt động cho danh sách, bộ, bộ dữ liệu và bất cứ điều gì xác định
[x for x in myList if x.n == 30]  # list of all elements with .n==30
7 hoặc
[x for x in myList if x.n == 30]  # list of all elements with .n==30
8).

if 5 in [data.n for data in myList]:
    print "Found it"

Xem thêm:

  • Chứa phương thức
  • Đi vào hoạt động

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 18:23Feb 28, 2009 at 18:23

Tom Dunhamtom DunhamTom Dunham

5.6692 Huy hiệu vàng30 Huy hiệu bạc26 Huy hiệu Đồng2 gold badges30 silver badges26 bronze badges

Một cách khác bạn có thể làm điều đó là sử dụng hàm tiếp theo ().

matched_obj = next(x for x in list if x.n == 10)

m0j0

3.2545 huy hiệu vàng28 Huy hiệu bạc33 Huy hiệu đồng5 gold badges28 silver badges33 bronze badges

Đã trả lời ngày 16 tháng 6 năm 2020 lúc 6:01Jun 16, 2020 at 6:01

Hướng dẫn how do you search objects in python? - làm thế nào để bạn tìm kiếm các đối tượng trong python?

SemicssemicsSEMICS

1212 Huy hiệu bạc4 Huy hiệu đồng2 silver badges4 bronze badges

Bạn nên thêm một phương thức

[x for x in myList if x.n == 30]  # list of all elements with .n==30
9 và
def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
0 vào lớp
def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
1 của bạn, nó có thể kiểm tra xem các thuộc tính
def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
2 có bằng nhau không (cùng một thuộc tính) và sau đó nếu giá trị của chúng cũng bằng nhau.

Nếu bạn đã làm điều đó, bạn có thể sử dụng

[x for x in myList if x.n == 30]  # list of all elements with .n==30
0

Từ khóa

[x for x in myList if x.n == 30]  # list of all elements with .n==30
6 kiểm tra nếu
def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
4 nằm trong
def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
5.

Nếu bạn chỉ muốn một thuộc tính

def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
6 trong
def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
1 bạn có thể sử dụng:

[x for x in myList if x.n == 30]  # list of all elements with .n==30
1

Đã trả lời ngày 28 tháng 2 năm 2009 lúc 18:10Feb 28, 2009 at 18:10

Johannes Weissjohannes WeissJohannes Weiss

51.2K15 Huy hiệu vàng99 Huy hiệu bạc134 Huy hiệu đồng15 gold badges99 silver badges134 bronze badges

Cân nhắc sử dụng từ điển:

[x for x in myList if x.n == 30]  # list of all elements with .n==30
2

Đã trả lời ngày 1 tháng 3 năm 2009 lúc 1:14Mar 1, 2009 at 1:14

dan-gphdan-gphdan-gph

15.8K12 Huy hiệu vàng60 Huy hiệu bạc77 Huy hiệu đồng12 gold badges60 silver badges77 bronze badges

2

Sử dụng danh sách hiểu biết sau kết hợp với phương thức

def contains(list, filter):
    for x in list:
        if filter(x):
            return True
    return False

if contains(myList, lambda x: x.n == 3)  # True if any element has .n==3
    # do stuff
8:

[x for x in myList if x.n == 30]  # list of all elements with .n==30
3

Tomerikoo

16.7K15 Huy hiệu vàng38 Huy hiệu bạc55 Huy hiệu Đồng15 gold badges38 silver badges55 bronze badges

Đã trả lời ngày 18 tháng 4 năm 2021 lúc 18:55Apr 18, 2021 at 18:55

Làm thế nào để bạn truy cập một danh sách các đối tượng trong Python?

Danh sách chỉ mục.Chúng ta có thể sử dụng toán tử chỉ mục [] để truy cập một mục trong danh sách.Trong Python, các chỉ số bắt đầu từ 0. Vì vậy, một danh sách có 5 phần tử sẽ có một chỉ mục từ 0 đến 4.use the index operator [] to access an item in a list. In Python, indices start at 0. So, a list having 5 elements will have an index from 0 to 4.

Làm thế nào để bạn lọc một danh sách các đối tượng trong Python?

Lọc danh sách Python với bộ lọc () Chức năng (hàm, có thể lặp lại) có chức năng làm đầu vào đảm nhận đối số (phần tử danh sách) và trả về giá trị boolean cho dù phần tử danh sách này có chuyển bộ lọc hay không.Tất cả các phần tử vượt qua bộ lọc được trả về dưới dạng đối tượng mới có thể lặp lại (một đối tượng bộ lọc).filter() The filter(function, iterable) function takes a function as input that takes on argument (a list element) and returns a Boolean value whether this list element should pass the filter. All elements that pass the filter are returned as a new iterable object (a filter object).

Hàm object () trong python là gì?

Hàm python () hàm hàm () hàm trả về một đối tượng trống.Bạn không thể thêm các thuộc tính hoặc phương thức mới vào đối tượng này.Đối tượng này là cơ sở cho tất cả các lớp, nó giữ các thuộc tính và phương thức tích hợp mặc định cho tất cả các lớp.returns an empty object. You cannot add new properties or methods to this object. This object is the base for all classes, it holds the built-in properties and methods which are default for all classes.