Hướng dẫn objects filter python - đối tượng lọc 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.

Nội phân chính

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

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.

DevPlayer

5.1451 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.1K12 Huy hiệu vàng90 Huy hiệu bạc109 Huy hiệu đồng12 gold badges90 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

379K96 Huy hiệu vàng507 Huy hiệu bạc584 Huy hiệu Đồng96 gold badges507 silver badges584 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

h3xStream

6.0532 Huy hiệu vàng44 Huy hiệu bạc55 Huy hiệu Đồng2 gold badges44 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

125K12 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

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.5K20 Huy hiệu vàng134 Huy hiệu bạc137 Huy hiệu đồng20 gold badges134 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

127K36 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.2245 huy hiệu vàng27 Huy hiệu bạc33 Huy hiệu đồng5 gold badges27 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

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

51K15 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.7K12 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.6K15 Huy hiệu vàng37 Huy hiệu bạc54 Huy hiệu đồng15 gold badges37 silver badges54 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 lọc một mảng các đối tượng trong Python?

Bạn có thể chọn các thuộc tính của một lớp bằng cách sử dụng ký hiệu dấu chấm. Giả sử ARR là một loạt các đối tượng ProjectFile. Bây giờ bạn lọc cho Somecocoapod bằng cách sử dụng. NB: Điều này trả về một đối tượng bộ lọc, là một trình tạo.select attributes of a class using the dot notation. Suppose arr is an array of ProjectFile objects. Now you filter for SomeCocoapod using. NB: This returns a filter object, which is a generator.

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

Filter [] là một hàm tích hợp trong Python. Hàm bộ lọc có thể được áp dụng cho một điều khác nhau, chẳng hạn như danh sách hoặc từ điển và tạo một trình lặp mới. Trình lặp mới này có thể lọc ra các yếu tố cụ thể nhất định dựa trên điều kiện mà bạn cung cấp rất hiệu quả.. The filter function can be applied to an iterable such as a list or a dictionary and create a new iterator. This new iterator can filter out certain specific elements based on the condition that you provide very efficiently.

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

Câu trả lời ngắn: Để lọc danh sách danh sách cho một điều kiện trên danh sách bên trong, hãy sử dụng câu lệnh Danh sách hiểu [x cho x trong danh sách nếu điều kiện [x]] và thay thế điều kiện [x] bằng điều kiện lọc của bạn trả về đúng để bao gồm Liệt kê X, và sai.use the list comprehension statement [x for x in list if condition[x]] and replace condition[x] with your filtering condition that returns True to include inner list x , and False otherwise.

Làm thế nào để bạn lọc một danh sách?

Trên tab Dữ liệu của Ribbon, trong nhóm Sắp xếp & Bộ lọc, nhấp vào Advanced, để mở hộp thoại Bộ lọc nâng cao. Để hành động, chọn Lọc Danh sách, tại chỗ. Đối với phạm vi danh sách, chọn bảng dữ liệu. Đối với phạm vi tiêu chí, chọn C1: C2 - tiêu đề tiêu đề và ô công thức.

Bài Viết Liên Quan

Chủ Đề