Hướng dẫn python list filter error in argument - lỗi bộ lọc danh sách python trong đối số

Nó không phải là một lỗi - bạn đã in một đối tượng của bộ lọc loại dưới dạng NO___Trans___PRE___18 không trả về danh sách - nó xây dựng một trình lặp, nhưng chỉ khi có yêu cầu cho nó.

Giải pháp đơn giản nhất là sử dụng hàm no___trans___pre___19 - nó yêu cầu một trình lặp và trả về danh sách:

print( list(filter(lambda x: x == "Python", languages)))

Thay vì lệnh của bạn

print( filter(lambda x: x == "Python",languages))

Lưu ý: Nó tương tự như in no___trans___pre___20 (là một đối tượng) và in no___trans___pre___21 (đó là danh sách).: It is similar to printing

filter(function, iterable)
0 (which is an object) and printing
filter(function, iterable)
1 (which is the list).

Có những thay đổi giữa NO___TRANS___PRE___22 và NO___TRANS___PRE___23 Trong hầu hết các chức năng đã trả về NO___Trans___Pre___24 trong Python 2.x - trong Python 3.x Họ trả về một cái gì đó chung hơn và ít hơn khi tiêu thụ, một thứ gì đó khác.recipe how to obtain elements in the case of interest.

So sánh: no___trans___pre___25 và no___trans___pre___26 (hoặc no___trans___pre___27). Không khác nhau? Hãy thử viết ra

filter(function, iterable)
8.
No difference? Try write down
filter(function, iterable)
8.

Giới thiệu

Có thể sử dụng chức năng Python tích hợp trong NO___TRANS___PRE___18 để tạo một trình lặp mới từ một ITEBLE có thể (như danh sách hoặc từ điển) sẽ lọc ra các phần tử bằng cách sử dụng hàm mà chúng tôi cung cấp. Một điều có thể là một đối tượng Python có thể được lặp lại trên mạng, nghĩa là, nó sẽ trả lại các mục theo một chuỗi để chúng ta có thể sử dụng nó trong vòng lặp no___trans___pre___30.

Cú pháp cơ bản cho hàm no___trans___pre___18 là:

filter(function, iterable)

Điều này sẽ trả về một đối tượng bộ lọc, đó là một điều khác. Chúng ta có thể sử dụng một chức năng như no___trans___pre___19 để lập danh sách tất cả các mục được trả về trong một đối tượng bộ lọc.

Chức năng NO___Trans___Pre___18 cung cấp một cách lọc các giá trị thường có thể hiệu quả hơn so với khả năng hiểu danh sách, đặc biệt là khi chúng tôi bắt đầu hoạt động với các bộ dữ liệu lớn hơn. Ví dụ, một danh sách hiểu sẽ tạo một danh sách mới, sẽ tăng thời gian chạy cho quá trình xử lý đó. Điều này có nghĩa là sau khi sự hiểu biết danh sách của chúng tôi đã hoàn thành biểu thức của nó, chúng tôi sẽ có hai danh sách trong bộ nhớ. Tuy nhiên,

print( filter(lambda x: x == "Python",languages))
8 sẽ tạo ra một đối tượng đơn giản chứa tham chiếu đến danh sách ban đầu, hàm được cung cấp và chỉ số nơi đi trong danh sách ban đầu, sẽ chiếm ít bộ nhớ hơn.

Trong hướng dẫn này, chúng tôi sẽ xem xét bốn cách khác nhau để sử dụng NO___Trans___Pre___18: với hai cấu trúc có thể lặp lại khác nhau, với hàm no___trans___pre___36 và không có chức năng xác định.

Sử dụng NO___Trans___Pre___18 với một chức năng

Đối số đầu tiên của NO___Trans___Pre___18 là một hàm, chúng tôi sử dụng để quyết định có bao gồm hoặc lọc ra từng mục. Hàm được gọi một lần cho mọi mục trong ITEBLE được truyền dưới dạng đối số thứ hai và mỗi lần nó trả về số ___trans___pre___39, giá trị bị hủy bỏ. Vì đối số này là một hàm, chúng ta có thể chuyển một hàm bình thường hoặc chúng ta có thể sử dụng các hàm no___trans___pre___36, đặc biệt khi biểu thức ít phức tạp hơn.

Sau đây là cú pháp của NO___Trans___Pre___36 với NO___Trans___Pre___18:

filter(lambda item: item[] expression, iterable)

Với một danh sách, giống như sau, chúng ta có thể kết hợp hàm no___trans___pre___36 với biểu thức mà chúng ta muốn đánh giá từng mục từ danh sách:

creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie']

Để lọc danh sách này để tìm tên của các sinh vật hồ cá của chúng tôi bắt đầu bằng một nguyên âm, chúng tôi có thể chạy chức năng NO___TRANS___PRE___36 sau đây:

print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names)))

Ở đây chúng tôi khai báo một mục trong danh sách của chúng tôi là no___trans___pre___45. Sau đó, chúng tôi đặt biểu thức của mình để truy cập vào ký tự đầu tiên của mỗi chuỗi (hoặc ký tự không có), vì vậy

creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie']
6. Hạ thấp trường hợp của mỗi tên đảm bảo điều này sẽ khớp với các chữ cái với chuỗi trong biểu thức của chúng tôi, no___trans___pre___47.

Cuối cùng, chúng tôi vượt qua số lượng không thể điều chỉnh NO___TRANS___PRE___48. Giống như trong phần trước, chúng tôi áp dụng

print( filter(lambda x: x == "Python",languages))
9 cho kết quả để tạo danh sách từ trình lặp lại số iterator no___trans___pre___18.

Đầu ra sẽ như sau:

Output

['Ashley', 'Olly']

Kết quả tương tự này có thể đạt được bằng cách sử dụng một hàm mà chúng tôi xác định:

creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie']

def names_vowels(x):
  return x[0].lower() in 'aeiou'

filtered_names = filter(names_vowels, creature_names)

print(list(filtered_names))

Hàm của chúng tôi

print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names)))
1 định nghĩa biểu thức mà chúng tôi sẽ thực hiện để lọc số ___trans___pre___48.

Một lần nữa, đầu ra sẽ như sau:

Output

['Ashley', 'Olly']

Nhìn chung, các chức năng

filter(lambda item: item[] expression, iterable)
6 đạt được kết quả tương tự với NO___TRANS___PRE___18 như khi chúng ta sử dụng hàm thông thường. Sự cần thiết phải xác định một hàm chính quy phát triển là sự phức tạp của các biểu thức để lọc tăng dữ liệu của chúng tôi, điều này có khả năng thúc đẩy khả năng đọc tốt hơn trong mã của chúng tôi.

Sử dụng NO___Trans___Pre___55 với NO___Trans___Pre___18

Chúng ta có thể vượt qua

print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names)))
5 như là đối số đầu tiên cho NO___TRANS___PRE___18 để có bộ lọc iterator được trả về bất kỳ giá trị nào mà Python coi là giả tưởng. Nói chung, Python xem xét bất cứ điều gì có độ dài no___trans___pre___59 (chẳng hạn như danh sách trống hoặc chuỗi trống) hoặc tương đương với số lượng không

Trong trường hợp sau, chúng tôi muốn lọc danh sách của mình để chỉ hiển thị số bể ở bể cá của chúng tôi:

aquarium_tanks = [11, False, 18, 21, "", 12, 34, 0, [], {}]

Trong mã này, chúng tôi có một danh sách chứa các số nguyên, chuỗi trống và giá trị boolean.

print( filter(lambda x: x == "Python",languages))
0

Chúng tôi sử dụng hàm no___trans___pre___18 với NO___Trans___PRE___55 và truyền trong danh sách NO___TRANS___PRE___63 như có thể sử dụng được. Vì chúng tôi đã vượt qua

print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names)))
5 làm đối số đầu tiên, chúng tôi sẽ kiểm tra xem các mục trong danh sách của chúng tôi có được coi là sai không.

print( filter(lambda x: x == "Python",languages))
1

Sau đó, chúng tôi kết thúc

Output

['Ashley', 'Olly']
5 trong hàm no___trans___pre___19 để nó trả về một danh sách cho NO___Trans___Pre___65 khi chúng tôi in.

Ở đây đầu ra chỉ hiển thị các số nguyên. Tất cả các mục được đánh giá là no___trans___pre___39, tương đương với NO___TRANS___PRE___59, đã bị xóa bởi NO___Trans___Pre___18:

print( filter(lambda x: x == "Python",languages))
2

Lưu ý: Nếu chúng tôi không sử dụng

print( filter(lambda x: x == "Python",languages))
9 và in no___trans___pre___65, chúng tôi sẽ nhận được một đối tượng bộ lọc như thế này: no___trans___pre___73. Đối tượng bộ lọc là một thứ có thể lặp lại, vì vậy chúng tôi có thể lặp lại nó với
filter(lambda item: item[] expression, iterable)
0 hoặc chúng tôi có thể sử dụng NO___Trans___Pre___19 để biến nó thành một danh sách mà chúng tôi làm ở đây vì đó là một cách tốt để xem xét kết quả.
: If we don’t use
print( filter(lambda x: x == "Python",languages))
9 and print

Output

['Ashley', 'Olly']
5 we would receive a filter object something like this:
creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie']

def names_vowels(x):
  return x[0].lower() in 'aeiou'

filtered_names = filter(names_vowels, creature_names)

print(list(filtered_names))
3. The filter object is an iterable, so we could loop over it with
filter(lambda item: item[] expression, iterable)
0 or we can use
print( filter(lambda x: x == "Python",languages))
9 to turn it into a list, which we’re doing here because it’s a good way to review the results.

Không có no___trans___pre___55, chúng tôi đã sử dụng NO___Trans___Pre___18 để nhanh chóng xóa các mục khỏi danh sách của chúng tôi được coi là sai.

Sử dụng NO___Trans___Pre___18 với danh sách từ điển

Khi chúng ta có cấu trúc dữ liệu phức tạp hơn, chúng ta vẫn có thể sử dụng NO___Trans___PRE___18 để đánh giá từng mục. Ví dụ: nếu chúng ta có một danh sách các từ điển, chúng ta không chỉ muốn lặp lại từng mục trong danh sách - một trong những từ điển - mà chúng ta cũng có thể muốn lặp lại từng khóa: cặp giá trị trong một từ điển để đánh giá Tất cả các dữ liệu.

Ví dụ, hãy để nói rằng chúng tôi có một danh sách của mỗi sinh vật trong bể cá của chúng tôi cùng với các chi tiết khác nhau về từng loại:

print( filter(lambda x: x == "Python",languages))
3

Chúng tôi muốn lọc dữ liệu này bằng một chuỗi tìm kiếm mà chúng tôi cung cấp cho chức năng. Để có

print( filter(lambda x: x == "Python",languages))
8 Truy cập từng từ điển và từng mục trong từ điển, chúng tôi xây dựng một hàm lồng nhau, như sau:

print( filter(lambda x: x == "Python",languages))
4

Chúng tôi xác định hàm no___trans___pre___81 không có no___trans___pre___82 và no___trans___pre___83 làm tham số. Trong no___trans___pre___81, chúng tôi vượt qua số ___trans___pre___85 của chúng tôi là hàm cho no___trans___pre___18. Hàm no___trans___pre___81 sẽ trả về trình lặp lại từ NO___TRANS___PRE___18.

NO___TRANS___PRE___85 mất

creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie']
5 làm đối số, đại diện cho một mục trong danh sách của chúng tôi (nghĩa là một từ điển duy nhất).

Tiếp theo vòng NO___Trans___Pre___30 truy cập các giá trị trong mỗi khóa: cặp giá trị trong từ điển của chúng tôi và sau đó sử dụng một câu lệnh có điều kiện để kiểm tra xem NO___Trans___Pre___83 có ở

aquarium_tanks = [11, False, 18, 21, "", 12, 34, 0, [], {}]
3 không, đại diện cho một giá trị.

Giống như trong các ví dụ trước của chúng tôi, nếu biểu thức đánh giá là no___trans___pre___94, hàm sẽ thêm mục vào đối tượng bộ lọc. Điều này sẽ trở lại sau khi hàm no___trans___pre___81 đã hoàn thành. Chúng tôi định vị

aquarium_tanks = [11, False, 18, 21, "", 12, 34, 0, [], {}]
6 bên ngoài vòng lặp của chúng tôi để nó kiểm tra mọi mục trong mỗi từ điển, thay vì quay lại sau khi kiểm tra từ điển đầu tiên.

Chúng tôi gọi

Output

['Ashley', 'Olly']
1 với danh sách từ điển và chuỗi tìm kiếm mà chúng tôi muốn tìm các trận đấu cho:

print( filter(lambda x: x == "Python",languages))
5

Khi chức năng hoàn thành, chúng tôi có đối tượng bộ lọc của chúng tôi được lưu trữ trong biến NO___TRANS___PRE___98, chúng tôi biến thành một danh sách và in:

print( filter(lambda x: x == "Python",languages))
6

Chúng tôi sẽ nhận được đầu ra sau từ chương trình này:

print( filter(lambda x: x == "Python",languages))
7

Chúng tôi đã lọc danh sách các từ điển với chuỗi tìm kiếm no___trans___pre___99. Chúng ta có thể thấy rằng ba từ điển bao gồm một số bể có số ___trans___pre___99 đã được trả về. Sử dụng chức năng lồng nhau của riêng chúng tôi cho phép chúng tôi truy cập vào mọi mục và kiểm tra hiệu quả mỗi mục so với chuỗi tìm kiếm.

Sự kết luận

Trong hướng dẫn này, chúng tôi đã học được các cách khác nhau để sử dụng chức năng NO___Trans___Pre___18 trong Python. Bây giờ bạn có thể sử dụng NO___TRANS___PRE___18 với chức năng của riêng bạn, hàm no___trans___pre___36 hoặc với NO___Trans___PRE___55 để lọc cho các mục khác nhau về độ phức tạp của cấu trúc dữ liệu.

Mặc dù trong hướng dẫn này, chúng tôi đã in các kết quả từ NO___Trans___PRE___18 ngay lập tức ở định dạng danh sách, có khả năng trong các chương trình của chúng tôi, chúng tôi sẽ sử dụng đối tượng NO___Trans___Pre___18 đã trả về và thao tác thêm dữ liệu.

Nếu bạn muốn tìm hiểu thêm Python, hãy xem cách viết mã của chúng tôi trong Sê -ri Python 3 và trang chủ đề Python của chúng tôi.