Hướng dẫn how do you filter a class list in python? - làm thế nào để bạn lọc một danh sách lớp trong python?

124

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

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.

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.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ạc584 Huy hiệu Đồng96 gold badges508 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.0632 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

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

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,7K20 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.2345 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

51.1K15 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.7K15 Huy hiệu vàng38 Huy hiệu bạc54 Huy hiệu đồng15 gold badges38 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 áp dụng một bộ lọc vào một danh sách?

Trên tab Dữ liệu, trong nhóm Sắp xếp & Bộ lọc, nhấp vào Bộ lọc. Trong tiêu đề cột để hiển thị một danh sách trong đó bạn có thể đưa ra các lựa chọn bộ lọc. Lưu ý Tùy thuộc vào loại dữ liệu trong cột, Microsoft Excel hiển thị các bộ lọc số hoặc bộ lọc văn bản trong danh sách.. in the column header to display a list in which you can make filter choices. Note Depending on the type of data in the column, Microsoft Excel displays either Number Filters or Text Filters in the list.

Lớp lọc trong Python là gì?

Python's Filter [] là một chức năng tích hợp cho phép bạn xử lý một thứ có thể lặp lại và trích xuất những mục đáp ứng một điều kiện nhất định.Quá trình này thường được gọi là hoạt động lọc.a built-in function that allows you to process an iterable and extract those items that satisfy a given condition. This process is commonly known as a filtering operation.

Làm thế nào để bạn lấy một danh sách từ một lớp học trong Python?

Chúng ta có thể tạo danh sách đối tượng trong Python bằng cách nối thêm các phiên bản lớp vào danh sách.Bằng cách này, mọi chỉ mục trong danh sách đều có thể trỏ đến các thuộc tính và phương thức của lớp và có thể truy cập chúng.Nếu bạn quan sát nó một cách chặt chẽ, một danh sách các đối tượng hoạt động giống như một mảng các cấu trúc trong C.appending class instances to list. By this, every index in the list can point to instance attributes and methods of the class and can access them. If you observe it closely, a list of objects behaves like an array of structures in C.

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

Lọc danh sách chuỗi bằng phương thức Filter [].Phương thức Filter [] chấp nhận hai tham số.Tham số đầu tiên lấy tên hàm hoặc không có và tham số thứ hai lấy tên của biến danh sách làm giá trị.Phương thức Filter [] lưu trữ các dữ liệu đó từ danh sách nếu nó trả về đúng, nếu không, nó sẽ loại bỏ dữ liệu.using filter[] method. filter[] method accepts two parameters. The first parameter takes a function name or None and the second parameter takes the name of the list variable as values. filter[] method stores those data from the list if it returns true, otherwise, it discards the data.

Chủ Đề