In bộ lọc Python

Cách hiệu quả nhất và Pythonic nhất là sử dụng khả năng hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
1 để lọc tất cả các phần tử từ danh sách

Làm cách nào để lọc danh sách trong Python?

In bộ lọc Python

Xem video này trên YouTube

Lọc với danh sách hiểu

Cách Pythonic nhất để lọc danh sách — theo ý kiến ​​​​của tôi — là câu lệnh hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
1. Bạn có thể thay thế điều kiện bằng bất kỳ chức năng nào của
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 mà bạn muốn sử dụng làm điều kiện lọc

Ví dụ: nếu bạn muốn lọc tất cả các phần tử nhỏ hơn, chẳng hạn như 10, bạn sẽ sử dụng câu lệnh hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
4 để tạo một danh sách mới với tất cả các phần tử danh sách nhỏ hơn 10

Dưới đây là ba ví dụ về lọc danh sách

  • Nhận các phần tử nhỏ hơn tám.
    lst = [8, 2, 6, 4, 3, 1]
    
    # Filter all elements <8
    small = list(map(lambda x: x if x<8 else None, lst))
    small = [x for x in small if x!=None]
    print(small)
    
    
    # Filter all even elements
    even = list(map(lambda x: x if x%2==0 else None, lst))
    even = [x for x in even if x!=None]
    print(even)
    
    
    # Filter all odd elements
    odd = list(map(lambda x: x if x%2 else None, lst))
    odd = [x for x in odd if x!=None]
    print(odd)
    5
  • Lấy các phần tử chẵn.
    lst = [8, 2, 6, 4, 3, 1]
    
    # Filter all elements <8
    small = list(map(lambda x: x if x<8 else None, lst))
    small = [x for x in small if x!=None]
    print(small)
    
    
    # Filter all even elements
    even = list(map(lambda x: x if x%2==0 else None, lst))
    even = [x for x in even if x!=None]
    print(even)
    
    
    # Filter all odd elements
    odd = list(map(lambda x: x if x%2 else None, lst))
    odd = [x for x in odd if x!=None]
    print(odd)
    6
  • Nhận các phần tử lẻ.
    lst = [8, 2, 6, 4, 3, 1]
    
    # Filter all elements <8
    small = list(map(lambda x: x if x<8 else None, lst))
    small = [x for x in small if x!=None]
    print(small)
    
    
    # Filter all even elements
    even = list(map(lambda x: x if x%2==0 else None, lst))
    even = [x for x in even if x!=None]
    print(even)
    
    
    # Filter all odd elements
    odd = list(map(lambda x: x if x%2 else None, lst))
    odd = [x for x in odd if x!=None]
    print(odd)
    7
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = [x for x in lst if x<8]
print(small)


# Filter all even elements
even = [x for x in lst if x%2==0]
print(even)

# Filter all odd elements
odd = [x for x in lst if x%2]
print(odd)

đầu ra là

________số 8

Đây là cách hiệu quả nhất để lọc danh sách và nó cũng là cách Pythonic nhất

Tuy nhiên, nếu bạn đang tìm kiếm các lựa chọn thay thế, hãy tiếp tục đọc vì tôi sẽ giải thích cho bạn từng sắc thái của việc lọc danh sách trong Python trong hướng dẫn toàn diện này

Lọc Danh sách Python bằng filter()

Hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
8 lấy một hàm 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ó vượt qua 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
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
9 mới (đối tượng bộ lọc)

Bạn có thể sử dụng câu lệnh hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
10 để tạo hàm ngay tại nơi bạn chuyển nó làm đối số

Cú pháp của hàm lambda là

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
11 và điều đó có nghĩa là bạn sử dụng
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 làm đối số đầu vào và kết quả là bạn trả về biểu thức (có thể hoặc không thể sử dụng
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 để quyết định giá trị trả về)

Hướng dẫn liên quan. Để biết thêm thông tin, hãy xem bài viết chi tiết trên blog của tôi về hàm lambda

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
5

đầu ra là

________số 8

Hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
14 trả về một đối tượng bộ lọc là một
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
15. Để chuyển đổi nó thành một danh sách, bạn sử dụng hàm tạo
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
16

bài viết liên quan

  • Cách lọc bằng hàm lambda

Lọc Danh sách Python bằng map()

Tôi chỉ thêm tùy chọn này vì mọi người vẫn đang cố gắng sử dụng hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
17 để lọc ra các phần tử khỏi danh sách

🛑 Đây rõ ràng là một cách làm sai

Lý do là hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
17 chỉ cho phép bạn chuyển đổi từng phần tử của danh sách thành phần tử mới. Nhưng bạn vẫn sẽ có cùng số phần tử trong danh sách

Do đó, bạn cần có thêm một bước lọc ra tất cả các phần tử (ví dụ: bằng cách sử dụng tính năng hiểu danh sách). Nhưng nếu bạn đã sẵn sàng thực hiện thêm bước này, bạn cũng có thể sử dụng khả năng hiểu danh sách để lọc ngay từ đầu

Đây là những gì tôi muốn nói

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)

Đầu ra lại giống nhau

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
1

Nhưng phương pháp lấy đầu ra này rõ ràng là không hiệu quả và không thể đọc được

Những bài viết liên quan

  • Cách thoát khỏi chức năng map() (và tại sao Guido ghét nó)

Trình tạo danh sách bộ lọc Python

Một biểu thức trình tạo tạo một trình vòng lặp trên một chuỗi các giá trị. Nó hoạt động giống như cách hiểu danh sách—nhưng không tạo kiểu dữ liệu danh sách. Cái này hiệu quả hơn một chút

Bạn có thể sử dụng các biểu thức trình tạo trong bất kỳ lệnh gọi hàm nào yêu cầu một lần lặp làm đầu vào. Ví dụ: nếu bạn muốn tính tổng của tất cả các giá trị đáp ứng một điều kiện nhất định trong danh sách

  • Đầu tiên, xác định
    lst = [8, 2, 6, 4, 3, 1]
    
    # Filter all elements <8
    small = list(map(lambda x: x if x<8 else None, lst))
    small = [x for x in small if x!=None]
    print(small)
    
    
    # Filter all even elements
    even = list(map(lambda x: x if x%2==0 else None, lst))
    even = [x for x in even if x!=None]
    print(even)
    
    
    # Filter all odd elements
    odd = list(map(lambda x: x if x%2 else None, lst))
    odd = [x for x in odd if x!=None]
    print(odd)
    15 giá trị đáp ứng một điều kiện nhất định
  • Thứ hai, tính tổng tất cả các giá trị đó bằng hàm
    lst = [8, 2, 6, 4, 3, 1]
    
    # Filter all elements <8
    small = list(map(lambda x: x if x<8 else None, lst))
    small = [x for x in small if x!=None]
    print(small)
    
    
    # Filter all even elements
    even = list(map(lambda x: x if x%2==0 else None, lst))
    even = [x for x in even if x!=None]
    print(even)
    
    
    # Filter all odd elements
    odd = list(map(lambda x: x if x%2 else None, lst))
    odd = [x for x in odd if x!=None]
    print(odd)
    50

Đây là một ví dụ mã cho thấy cách tính tổng tất cả các giá trị số nguyên trong danh sách (và bỏ qua phần còn lại) bằng cách sử dụng biểu thức trình tạo để lọc ra những giá trị không phải số nguyên đó

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
5

Bạn kiểm tra

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
51 của từng phần tử và so sánh với kiểu số nguyên. So sánh này trả về
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 nếu trên thực tế, phần tử có kiểu số nguyên

Danh sách bộ lọc Python có điều kiện

Bạn có thể xác định bất kỳ điều kiện phức tạp nào trên phần tử danh sách để quyết định có lọc nó ra hay không

Chỉ cần tạo chức năng của riêng bạn (e. g. ,

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
53) lấy một phần tử danh sách làm đầu vào và trả về giá trị Boolean
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 nếu điều kiện được đáp ứng hoặc
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55 nếu không

Đây là một ví dụ mã

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
2

Tất cả các phần tử nhỏ hơn 10 và lớn hơn 0 đều được đưa vào danh sách đã lọc. Như vậy chỉ còn lại một phần tử 3

Danh sách bộ lọc Python Nhiều điều kiện

Điều tương tự cũng áp dụng nếu bạn muốn kết hợp nhiều điều kiện

Giả sử, bạn muốn lọc ra tất cả các phần tử

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
56 và
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
57. Đây là hai điều kiện (đơn giản)

Bạn có thể xác định bất kỳ điều kiện phức tạp nào trên phần tử danh sách để quyết định có lọc nó ra hay không. Để làm điều này, hãy tạo một hàm (e. g. ,

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
53) lấy một phần tử danh sách làm đầu vào và trả về giá trị Boolean
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 nếu điều kiện được đáp ứng hoặc
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55 nếu không

Đây là ví dụ mã giống như trước đây

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
2

Tất cả các phần tử nhỏ hơn 10 và lớn hơn 0 đều được đưa vào danh sách đã lọc. Như vậy chỉ còn lại một phần tử 3

Danh sách bộ lọc Python với Regex

Vấn đề. Đưa ra một danh sách các chuỗi. Làm cách nào bạn có thể lọc những cái phù hợp với một biểu thức chính quy nhất định?

Thí dụ. Giả sử, bạn có một danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
21 và bạn muốn lọc ra những phần tử không đáp ứng mẫu biểu thức chính quy
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
22. Bạn mong đợi danh sách được lọc là
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
23

Dung dịch. Sử dụng khung lọc hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
24 để lọc ra tất cả các phần tử không khớp với một chuỗi đã cho

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3

Bạn sử dụng phương thức

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
25 để trả về một đối tượng khớp nếu có kết quả khớp hoặc ngược lại là
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
26

Trong Python, bất kỳ đối tượng so khớp nào cũng có giá trị là

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 (nếu cần) ngoại trừ một số ngoại lệ (e. g. ,
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
26,
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
29,
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
20, v.v. )

Nếu bạn cần làm mới kiến ​​thức cơ bản của mình về hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
25, hãy xem bài viết chi tiết trên blog của tôi để hướng dẫn bạn từng bước về công cụ Python mạnh mẽ này

Những bài viết liên quan

  • Cách đếm các phần tử trong danh sách khớp với một điều kiện
  • Cách ghép một từ chính xác trong Python
  • Cách đếm số trận đấu trong Python

Làm cách nào để lọc danh sách danh sách Python?

Câu trả lời ngắn. Để lọc một danh sách các danh sách cho một điều kiện trong các danh sách bên trong, hãy sử dụng câu lệnh hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
22 và thay thế
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
53 bằng điều kiện lọc của bạn. Điều kiện này trả về
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 để bao gồm danh sách bên trong
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 và ngược lại là
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55

Vui lòng xem video của tôi về chủ đề này

Làm cách nào để lọc danh sách trong Python?

In bộ lọc Python

Xem video này trên YouTube

Danh sách thuộc về cấu trúc dữ liệu quan trọng nhất trong Python—mọi lập trình viên bậc thầy đều thuộc lòng chúng

Đáng ngạc nhiên là ngay cả những lập trình viên trung cấp cũng không biết cách tốt nhất để lọc một danh sách—chứ đừng nói đến danh sách các danh sách trong Python. Hướng dẫn này chỉ cho bạn cách thực hiện cái sau

Vấn đề. Giả sử, bạn có một danh sách các danh sách. Bạn muốn lọc danh sách các danh sách để chỉ còn lại những danh sách bên trong thỏa mãn một điều kiện nào đó. Điều kiện là một chức năng của danh sách bên trong—chẳng hạn như giá trị trung bình hoặc tổng của các phần tử danh sách bên trong

In bộ lọc Python

Thí dụ. Đưa ra danh sách các danh sách sau đây với các phép đo nhiệt độ hàng tuần mỗi tuần—và một danh sách bên trong mỗi tuần

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
0

Làm cách nào để lọc ra các tuần lạnh hơn với giá trị nhiệt độ trung bình <8?

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
1

Có hai phương pháp ngữ nghĩa tương đương để đạt được điều này. hiểu danh sách và chức năng

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
17

Những bài viết liên quan

  • Làm cách nào để lọc danh sách danh sách Python?
  • Hiểu danh sách - Danh sách danh sách Python
  • Lọc () so với Hiểu danh sách
  • Hiểu danh sách lồng nhau
  • Hướng dẫn cơ bản về danh sách Python
  • Danh sách hiểu

Danh sách chuỗi bộ lọc Python

Vấn đề. Đưa ra một danh sách các chuỗi và một chuỗi truy vấn. Làm cách nào bạn có thể lọc những chuỗi chứa chuỗi truy vấn?

Thí dụ. Giả sử, bạn có một danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
21 và bạn muốn lấy tất cả các phần tử có chứa chuỗi con
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
29. Bạn mong muốn danh sách được lọc là
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
30

Dung dịch. Sử dụng khung lọc hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
1 để lọc ra tất cả các phần tử không chứa chuỗi khác

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
2

Bạn sử dụng thao tác thành viên chuỗi cơ bản “in” để kiểm tra xem một phần tử có vượt qua bộ lọc hay không

Danh sách bộ lọc Python Xóa chuỗi rỗng

Vấn đề. Đưa ra một danh sách các chuỗi. Làm thế nào bạn có thể loại bỏ tất cả các chuỗi rỗng?

Thí dụ. Giả sử, bạn có một danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
32 và bạn muốn nhận một danh sách mới
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
21 gồm các chuỗi không trống

Dung dịch. Sử dụng khung lọc hiểu danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
34 để lọc ra tất cả các chuỗi trống

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
3

Bạn sử dụng thuộc tính mà Python gán giá trị Boolean

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
35 cho chuỗi rỗng
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
36

Danh sách bộ lọc Python kết thúc với() và bắt đầu với()

Vấn đề. Đưa ra một danh sách các chuỗi. Làm cách nào bạn có thể lọc những chuỗi bắt đầu bằng một chuỗi khác (hoặc kết thúc bằng một chuỗi khác)?

Thí dụ. Giả sử, bạn có một danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
21 và bạn muốn lấy tất cả các phần tử bắt đầu bằng
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
29. Bạn mong muốn danh sách được lọc là
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
30

Dung dịch. Sử dụng khung lọc hiểu danh sách

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
00 để lọc ra tất cả các phần tử bắt đầu bằng
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
29

Nếu bạn muốn kiểm tra các chuỗi kết thúc bằng một chuỗi khác, bạn có thể sử dụng hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
02 để thay thế

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
4

Bạn sử dụng các hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
03 và
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
04 làm điều kiện lọc

Danh sách bộ lọc Python với Lambda

Hàm

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
8 lấy hàm lọc làm đối số lấy một thành phần danh sách làm đầu vào và trả về giá trị Boolean
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 nếu điều kiện được đáp ứng hoặc
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55 nếu không. Hàm này quyết định một phần tử có được đưa vào danh sách đã lọc hay không

Để xác định chức năng này, bạn có thể sử dụng từ khóa

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
10. Hàm lambda là một hàm ẩn danh—hãy nghĩ về nó như một hàm bỏ đi chỉ cần làm đối số và không cần gì khác trong mã

Đây là mã cho biết cách lọc danh sách bằng cách sử dụng hàm lambda để lọc danh sách và chỉ trả về các giá trị lẻ trong danh sách

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
5

Hàm lambda

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
09 nhận một đối số
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3—phần tử được kiểm tra đối với bộ lọc—và trả về kết quả của biểu thức
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
11. Biểu thức modulo này trả về 1 nếu số nguyên là số lẻ và 0 nếu số nguyên là số chẵn

Do đó, tất cả các phần tử lẻ đều vượt qua bài kiểm tra

Danh sách bộ lọc Python với một danh sách khác

Vấn đề. Đưa ra một danh sách các giá trị

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
12 và một danh sách Booleans
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
13. Làm cách nào để lọc danh sách đầu tiên bằng danh sách thứ hai?

Thí dụ. Dưới đây là hai danh sách ví dụ

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
6

Và bạn muốn có được danh sách này

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
7

Dung dịch. Sử dụng một câu lệnh hiểu danh sách đơn giản

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
18 để kiểm tra từng chỉ mục i xem giá trị Boolean của bộ lọc tương ứng có phải là
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 hay không. Trong trường hợp này, bạn thêm phần tử ở chỉ số
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
14 trong
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
12 vào danh sách đã lọc mới

Đây là mã

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
8

Danh sách Boolean đóng vai trò là “mặt nạ” xác định phần tử nào vượt qua bộ lọc và phần tử nào không.

Một cách khác là sử dụng hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
22 để lặp lại nhiều chuỗi mà không cần chạm vào bất kỳ chỉ mục nào

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
9

Có liên quan. Bạn có cần cải thiện sự hiểu biết về

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
22 của mình không?

Danh sách bộ lọc Python có chỉ mục

Vấn đề. Đưa ra một danh sách các giá trị và một danh sách các chỉ số. Làm cách nào để lọc tất cả các phần tử có chỉ số trong danh sách thứ hai?

Thí dụ. Bạn đã mất ________ 824 và các chỉ số ________ 825. Bạn đang tìm kiếm danh sách đã lọc

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
26

Dung dịch. Xem qua tất cả các chỉ mục trong danh sách thứ hai và bao gồm các phần tử danh sách tương ứng bằng cách sử dụng một câu lệnh hiểu danh sách đơn giản

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
27

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
50

Chỉ có hai phần tử có chỉ số 1 và 2 vượt qua bộ lọc

Bộ lọc Python Danh sách từ điển

Vấn đề. Đưa ra một danh sách các từ điển. Mỗi từ điển bao gồm một hoặc nhiều cặp (khóa, giá trị). Bạn muốn lọc chúng theo giá trị của một khóa từ điển cụ thể (thuộc tính). Làm thế nào để bạn làm điều này?

Ví dụ tối thiểu. Xem xét ví dụ sau khi bạn có ba từ điển người dùng với các khóa

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
28,
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
29 và
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
30. Bạn muốn lấy danh sách tất cả người dùng đáp ứng một điều kiện nhất định, chẳng hạn như
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
31

Đây là những gì bạn cố gắng hoàn thành

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
51

Đầu ra sẽ giống như thế này khi thuộc tính

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
30 xác định liệu một từ điển có vượt qua bộ lọc hay không, tôi. e. ,
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
31

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52

Dung dịch. Sử dụng hiểu danh sách

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
34 để tạo danh sách từ điển mới đáp ứng điều kiện. Tất cả các từ điển trong ________ 812 không thỏa điều kiện đều bị lọc ra. Bạn có thể xác định tình trạng của riêng mình trên phần tử danh sách
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3

Đây là đoạn mã hướng dẫn bạn cách lọc ra tất cả các từ điển người dùng không đáp ứng điều kiện đã chơi ít nhất 100 giờ

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
53

Đầu ra là danh sách từ điển đã lọc thỏa mãn điều kiện

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52

Các bài viết liên quan trên blog Finxter

  • Cách lọc danh sách từ điển
  • Danh sách hiểu
  • Hàm Lambda
  • từ điển

Danh sách bộ lọc Python duy nhất – Loại bỏ các bản sao

Làm cách nào để xóa tất cả các giá trị trùng lặp của một giá trị nhất định trong danh sách?

Cách tiếp cận ngây thơ là đi qua từng phần tử và kiểm tra xem phần tử này đã tồn tại trong danh sách chưa. Nếu vậy, loại bỏ nó. Tuy nhiên, điều này mất một vài dòng mã

Một cách ngắn gọn và súc tích hơn là tạo một từ điển từ các phần tử trong danh sách. Mỗi phần tử danh sách trở thành một khóa mới cho từ điển. Tất cả các phần tử xảy ra nhiều lần sẽ được gán cho cùng một khóa. Từ điển chỉ chứa các khóa duy nhất—không thể có nhiều khóa bằng nhau

Là giá trị từ điển, bạn chỉ cần lấy giá trị giả (theo mặc định)

Bài viết blog liên quan

  • Kiểm tra hướng dẫn từ điển cuối cùng của tôi để học tập tối đa

Sau đó, bạn chỉ cần chuyển đổi từ điển trở lại danh sách loại bỏ các giá trị giả. Vì các khóa từ điển giữ nguyên thứ tự nên bạn không bị mất thông tin thứ tự của các phần tử danh sách gốc

Đây là mã

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55

Phạm vi danh sách bộ lọc Python

Lọc tất cả các phần tử trong danh sách nằm trong phạm vi giá trị giữa các chỉ số

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
37 và
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
38 đã cho

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
56

Bạn dùng điều kiện ________ 839 để kiểm tra xem danh sách phần tử

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 có rơi vào dãy ________ 841 hay không

Danh sách bộ lọc Python Lớn hơn và Nhỏ hơn

Lọc tất cả các phần tử trong danh sách lớn hơn giá trị y đã cho

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
57

Bạn dùng điều kiện ________ 842 để kiểm tra xem phần tử danh sách

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 có lớn hơn ________ 844 hay không. Trong trường hợp trước, nó được đưa vào danh sách đã lọc. Trong trường hợp sau, nó không phải là

Bạn có thể sử dụng ý tưởng tương tự với toán tử nhỏ hơn

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
45 thông qua câu lệnh hiểu danh sách
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
46

Số lượng danh sách bộ lọc Python

Làm cách nào bạn có thể đếm các phần tử trong một điều kiện nhất định trong Python?

Ví dụ, nếu bạn muốn đếm tất cả các giá trị chẵn trong một danh sách thì sao?

Có nhiều cách để thực hiện điều này, hãy thảo luận từng cách một

Giả sử, bạn có một điều kiện cho từng phần tử

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3. Hãy biến nó thành một hàm có tên
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
53. Bạn có thể xác định bất kỳ điều kiện nào bạn muốn—chỉ cần đặt nó vào hàm của bạn

Ví dụ: điều kiện này trả về

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 cho tất cả các phần tử lớn hơn số nguyên 10

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
58

Nhưng bạn cũng có thể xác định các điều kiện phức tạp hơn như kiểm tra xem chúng có phải là số nguyên tố không

Danh sách Python Đếm Nếu

Làm thế nào bạn có thể đếm các phần tử của danh sách NẾU điều kiện được đáp ứng?

Câu trả lời là sử dụng biểu thức trình tạo đơn giản

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
50

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
59

Kết quả cho biết có 2 phần tử lớn hơn 10. Bạn đã sử dụng một biểu thức trình tạo trả về một trình vòng lặp của Booleans

Lưu ý rằng Boolean

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52 được biểu thị bằng giá trị nguyên 1 và Boolean
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55 được biểu thị bằng giá trị nguyên 0. Đó là lý do tại sao bạn có thể chỉ cần tính tổng trên tất cả các Boolean để có được số phần tử thỏa mãn điều kiện

Số lượng danh sách Python lớn hơn/nhỏ hơn

Nếu bạn muốn xác định số phần tử lớn hơn hoặc nhỏ hơn một giá trị cụ thể, chỉ cần sửa đổi điều kiện trong ví dụ này

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
59

Ví dụ: để tìm số phần tử nhỏ hơn 5, hãy sử dụng điều kiện

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
53 trong biểu thức trình tạo

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
1

Danh sách Python Đếm Zero / Non-Zero

Để đếm số 0 trong một danh sách nhất định, hãy sử dụng lệnh gọi phương thức

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
54

Để đếm số lượng khác 0 trong một danh sách nhất định, bạn nên sử dụng cách đếm có điều kiện như đã thảo luận trước đây

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
2

Danh sách Python Đếm Lambda + Bản đồ

Một cách khác là sử dụng kết hợp bản đồ và hàm lambda

Những bài viết liên quan

  • [Hướng dẫn đầy đủ] Chức năng bản đồ. thao tác từng phần tử trong một lần lặp
  • [Hướng dẫn đầy đủ] Hàm Lambda. tạo một chức năng ẩn danh

Đây là mã

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
3

Bạn đếm số số nguyên chẵn trong danh sách

  • Hàm lambda trả về giá trị thực cho một phần tử đã cho
    lst = [8, 2, 6, 4, 3, 1]
    
    # Filter all elements <8
    small = list(map(lambda x: x if x<8 else None, lst))
    small = [x for x in small if x!=None]
    print(small)
    
    
    # Filter all even elements
    even = list(map(lambda x: x if x%2==0 else None, lst))
    even = [x for x in even if x!=None]
    print(even)
    
    
    # Filter all odd elements
    odd = list(map(lambda x: x if x%2 else None, lst))
    odd = [x for x in odd if x!=None]
    print(odd)
    3
  • Hàm
    # Elements <8
    [2, 6, 4, 3, 1]
    
    # Even Elements
    [8, 2, 6, 4]
    
    # Odd Elements
    [3, 1]
    56 chuyển đổi từng thành phần danh sách thành giá trị Boolean (1 hoặc 0)
  • Hàm
    # Elements <8
    [2, 6, 4, 3, 1]
    
    # Even Elements
    [8, 2, 6, 4]
    
    # Odd Elements
    [3, 1]
    57 tính tổng các số “1”

Kết quả là số phần tử mà điều kiện đánh giá là

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
52

Danh sách bộ lọc Python theo độ dài chuỗi

Đưa ra một danh sách các chuỗi

Làm cách nào để có được tất cả các phần tử có nhiều hơn

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
3 ký tự? . cách lọc danh sách theo độ dài chuỗi?

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
4

Câu lệnh hiểu danh sách

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
60 lọc tất cả các chuỗi có nhiều hơn ba ký tự

Danh sách bộ lọc Python Không có

Làm cách nào để xóa tất cả các giá trị

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
26 khỏi danh sách?

Ví dụ: bạn có danh sách

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
62 và bạn muốn danh sách
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
63. Làm thế nào để bạn làm điều này?

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
5

Trong Python, mỗi phần tử có một giá trị Boolean được liên kết để bạn có thể sử dụng bất kỳ đối tượng Python nào làm điều kiện. Giá trị

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
26 được liên kết với giá trị Boolean
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
55

Danh sách JSON của bộ lọc Python

Vấn đề. Giả sử, bạn có một đối tượng danh sách JSON. Bạn muốn lọc danh sách dựa trên một thuộc tính. Làm thế nào để thực hiện điều đó?

Thí dụ. Đưa ra danh sách JSON sau đây

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
6

Bạn muốn tìm tất cả người dùng có loại tài khoản

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
66

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
7

Dung dịch. Sử dụng khả năng hiểu danh sách

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
67 để lọc danh sách và lấy danh sách JSON mới với các đối tượng vượt qua bộ lọc

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
8

Chỉ Ann và Bob có tài khoản trả phí và vượt qua bài kiểm tra

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
68

Danh sách bộ lọc Python Một dòng

Bạn muốn lọc danh sách của mình theo một điều kiện nhất định trong một dòng mã? . Một lớp lót này trả về một đối tượng danh sách mới với tất cả các phần tử vượt qua "bài kiểm tra" lọc

Đây là một ví dụ

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
9

Bộ lọc một lớp tất cả các phần tử trong danh sách và kiểm tra xem chúng có thuộc loại chuỗi không. Nếu có, họ sẽ vượt qua bài kiểm tra và được đưa vào danh sách mới

Nếu bạn thích một lớp lót, bạn sẽ thích cuốn sách Python One-Liner của tôi (NoStarch Press 2020). Nó chỉ cho bạn chính xác cách viết mã Pythonic và nén suy nghĩ và viết mã của bạn thành dạng tối giản nhất

Danh sách bộ lọc Python hiệu quả. bộ lọc () so với Hiểu danh sách

[Spoiler] Lọc danh sách nào nhanh hơn.

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 so với khả năng hiểu danh sách?

Để trả lời câu hỏi này, tôi đã viết một đoạn script ngắn để kiểm tra hiệu suất thời gian chạy của việc lọc các danh sách lớn có kích thước tăng dần bằng cách sử dụng

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 và các phương pháp hiểu danh sách

Luận điểm của tôi là phương pháp hiểu danh sách sẽ nhanh hơn một chút đối với kích thước danh sách lớn hơn vì nó thúc đẩy việc triển khai hiểu danh sách hiệu quả của cPython và không cần gọi một hàm bổ sung

Tôi đã sử dụng máy tính xách tay của mình với Intel(R) Core(TM) i7-8565U 1. Bộ xử lý 8GHz (với Turbo Boost lên đến 4. 6 GHz) và 8 GB RAM

Sau đó, tôi đã tạo 100 danh sách bằng cả hai phương thức với kích thước từ 10.000 phần tử đến 1.000.000 phần tử. Là các phần tử, tôi chỉ đơn giản là tăng số nguyên lên một bắt đầu từ 0

Đây là mã tôi đã sử dụng để đo lường và vẽ kết quả. phương pháp nào nhanh hơn—

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 hay hiểu danh sách?

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
0

Mã so sánh thời gian chạy của hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 và biến thể hiểu danh sách để lọc danh sách. Lưu ý rằng hàm
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 trả về một đối tượng bộ lọc, vì vậy bạn cần chuyển đổi nó thành một danh sách bằng cách sử dụng hàm tạo
# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
77

Đây là biểu đồ kết quả so sánh thời gian chạy của hai phương thức

In bộ lọc Python

Trên trục x, bạn có thể thấy kích thước danh sách từ 0 đến 1.000.000 phần tử. Trên trục y, bạn có thể thấy thời gian chạy tính bằng giây cần thiết để thực thi các chức năng tương ứng

Biểu đồ kết quả cho thấy cả hai phương pháp đều cực kỳ nhanh đối với vài chục nghìn phần tử. Trên thực tế, chúng nhanh đến mức chức năng

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
78 của mô-đun thời gian không thể ghi lại thời gian đã trôi qua

Nhưng khi bạn tăng kích thước của danh sách lên hàng trăm nghìn phần tử, phương pháp hiểu danh sách bắt đầu giành chiến thắng.

Đối với các danh sách lớn có một triệu phần tử, việc lọc danh sách bằng khả năng hiểu danh sách nhanh hơn 40% so với phương pháp

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 tích hợp

Lý do là việc triển khai hiệu quả câu lệnh hiểu danh sách. Một quan sát thú vị là như sau mặc dù. Nếu không chuyển hàm lọc thành danh sách, bạn sẽ nhận được kết quả như sau

In bộ lọc Python

Đột nhiên hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 có thời gian chạy liên tục gần bằng 0 giây—bất kể có bao nhiêu phần tử trong danh sách. Tại sao chuyện này đang xảy ra?

Lời giải thích thật đơn giản. chức năng bộ lọc trả về một trình vòng lặp, không phải danh sách. Iterator không cần tính toán một phần tử nào cho đến khi nó được yêu cầu tính toán phần tử

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
81

Vì vậy, hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 chỉ tính toán phần tử tiếp theo nếu bắt buộc phải làm như vậy. Chỉ khi bạn chuyển đổi nó thành một danh sách, nó phải tính toán tất cả các giá trị. Mặt khác, nó không thực sự tính toán trước một giá trị nào

Lập trình hài hước – Python

In bộ lọc Python
“Tôi đã viết 20 chương trình ngắn bằng Python ngày hôm qua. Thật tuyệt. Perl, tôi sẽ rời xa bạn. ” — xkcd

Đi đâu từ đây

Hướng dẫn này đã chỉ cho bạn thông tin chi tiết về hàm

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]
71 trong Python và so sánh nó với cách lọc hiểu danh sách.
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = list(map(lambda x: x if x<8 else None, lst))
small = [x for x in small if x!=None]
print(small)


# Filter all even elements
even = list(map(lambda x: x if x%2==0 else None, lst))
even = [x for x in even if x!=None]
print(even)


# Filter all odd elements
odd = list(map(lambda x: x if x%2 else None, lst))
odd = [x for x in odd if x!=None]
print(odd)
1. Bạn đã thấy rằng cái sau không chỉ dễ đọc hơn và giống Pythonic hơn mà còn nhanh hơn. Vì vậy, hãy sử dụng phương pháp hiểu danh sách để lọc danh sách

Nếu bạn yêu thích viết mã và bạn muốn làm công việc này toàn thời gian một cách thoải mái tại nhà riêng của mình, bạn thật may mắn

Tôi đã tạo một hội thảo trực tuyến miễn phí cho bạn thấy tôi đã bắt đầu như thế nào với tư cách là một người làm việc tự do bằng Python sau khi học khoa học máy tính và làm việc tại nhà (và chứng kiến ​​các con tôi lớn lên) trong khi vẫn kiếm được thu nhập toàn thời gian chỉ bằng công việc bán thời gian

Hội thảo trực tuyến. Làm thế nào để trở thành Freelancer Python sáu con số?

Tham gia cùng 21.419 lập trình viên Python đầy tham vọng. Nó vui

In bộ lọc Python

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây