Tôi muốn lọc chuỗi trong danh sách dựa trên cụm từ thông dụng.Cụm từ thông dụng: Tìm kiếm trong danh sách
Có điều gì tốt hơn [x for x in list if r.match(x)]
không?
Tôi muốn lọc chuỗi trong danh sách dựa trên cụm từ thông dụng.Cụm từ thông dụng: Tìm kiếm trong danh sách
Có điều gì tốt hơn [x for x in list if r.match(x)]
không?
filter(r.match, list)
Full Ví dụ:
import re
mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = filter(r.match, mylist)
print str(newlist)
Prints:
['cat', 'wildcat', 'thundercat']
Xin chào, Khi tôi chạy mã trên, tôi nhận được '<đối tượng lọc tại 0x1057acda0>' Tôi đang làm gì sai? – Joshua
Theo tài liệu python (trăn 2.7.12): https://docs.python.org/2/library/functions.html#filter bộ lọc trả về một danh sách không phải là một đối tượng. Bạn cũng có thể kiểm tra mã đó: https://repl.it/X3G/5786 (chỉ cần nhấn chạy) – Mercury
Cảm ơn bạn. Tôi đang sử dụng Python 3.5.2 trên máy Mac. Tôi đã thử liên kết của bạn. Tất nhiên nó hoạt động, mặc dù không chắc chắn tại sao tôi nhận được thông điệp đó. Tôi thậm chí đã xóa 'str' vì' filter' trả về một danh sách, không có kết quả ... – Joshua
Trên thực tế, comprehensions danh sách thường được ưa thích hơn các cấu trúc chức năng như bộ lọc, giảm, lambda vv –
@ Ivo : Chúng thường được ưa thích vì chúng thường rõ ràng hơn và thường ngắn gọn hơn. Tuy nhiên trong trường hợp này, phiên bản 'filter' là hoàn toàn rõ ràng và có ít tiếng ồn hơn nhiều. – sepp2k