Ánh xạ vào danh sách python

Chúng ta thường hay phải xử lý các phần tử của một danh sách hoặc một vùng chứa nào đó bằng một phương thức

Giả sử ta phải cập nhật một danh sách bằng cách tăng từng giá trị trong danh sách đó lên 1 đơn vị

>>> kteam = [1, 2, 3, 4]
>>> kteam_updated = []
>>> for value in kteam:
..     kteam_updated.append[value + 1]
...
>>> kteam_updated
[2, 3, 4, 5]

Chúng ta sẽ xem xét sơ đồ qua cú pháp của hàm map trước khi xem hàm map xử lý công việc bên trên. Đầu tiên là cái cơ bản nhất

bản đồ [func, có thể lặp lại]

Hàm bản đồ này sẽ trả về một đối tượng bản đồ [một trình tạo định dạng]

Vậy chức năng map hoạt động như thế nào?

Nôm na hàm map it will look like this

>>> def mymap[func, iterable]:
..     for x in iterable:
..             yield func[x]

Chúng ta đến với ví dụ để hiểu rõ hơn

>>> def inc[x]: return x + 1
...
>>> kteam = [1, 2, 3, 4]
>>> list[map[inc, kteam]] # dùng constructor list để ta dễ quan sát dữ liệu
[2, 3, 4, 5]

Bạn còn nhớ lambda chứ?

>>> kteam = [1, 2, 3, 4]
>>> list[map[lambda x: x + 1, kteam]]
[2, 3, 4, 5]

Đôi lúc, việc sử dụng hàm map còn nhanh hơn cả việc hiểu danh sách

>>> inc = lambda x: x + 1
>>> kteam = [1, 2, 3, 4]
>>>
>>> [inc[x] for x in kteam
[2, 3, 4, 5]
>>> list[map[inc, kteam]]
[2, 3, 4, 5]

Lưu ý. Ở phần hiểu danh sách trên, nếu bạn thay thế khung chiết [ [ ] bằng khung chiết [ [  ] thì khoảng thời gian của khung chiết có thể tương đương với bản đồ hàm và tiết kiệm dữ liệu hơn mức hiểu danh sách vì nó cũng tạo ra một biểu thức trình tạo

Ta extension map ra nhé. Vì bản đồ hàm đầy đủ cú pháp là

bản đồ [func, * lặp lại]

Bạn đọc lưu ý, khi bạn chuyển vào nhiều vùng chứa để biến hàm map gọm lại bằng cách đóng gói đối số thì các vùng chứa phải cùng số lượng giá trị [cùng giá trị hàm len]. Vì khi có nhiều container pass vào, hàm map sẽ cùng một lúc lấy giá trị của các container

Bạn đọc sẽ hiểu kỹ khi xem ví dụ sau đây

>>> func = lambda x, y: x + y
>>>
>>> kteam_1 = [1, 2, 3, 4]
>>> kteam_2 = [5, 6, 7, 8]
>>>
>>> kteam = map[func, kteam_1, kteam_2]
>>> list[kteam]
[6, 8, 10, 12]

Như bạn đã thấy, hàm map sẽ lấy từng giá trị của cả hai danh sách rồi gửi nó vào hàm. À, bạn cũng phải lưu ý là bạn pass vào n container thì bạn cũng phải thiết kế cái hàm nào có thể nhận n đối số luôn nhé

>>> pow[2, 3] # 2^3
8
>>> pow[3, 4] # 3^4
81
>>> list[map[pow, [1, 2, 3], [2, 2, 2,]]] # 1^2, 2^2, 3^2
[1, 4, 9]

hàm lọc

Filter có nghĩa là bộ lọc bộ phận. Nghe qua, chắc bạn cũng ít nhiều biết được nó sẽ làm gì rồi

Cú pháp this function as after

bộ lọc [chức năng hoặc Không, có thể lặp lại]

Cũng như bản đồ hàm, bộ lọc hàm sẽ trả về một đối tượng bộ lọc [đối tượng trình tạo một định dạng]

Lưu ý. không giống hàm map, iterable ở đây chỉ là 1 container, không có đối số đóng gói

Hàm filter lấy từng giá trị trong iterable, sau đó gửi vào hàm, nếu như giá trị hàm trả về là một giá trị mà khi chuyển sang kiểu dữ liệu boolean là True thì sẽ trả về giá trị đó, nếu không thì bỏ qua

Trường hợp bạn không gửi hàm vào mà là Không có, hàm lọc lấy từng giá trị trong iterable, nếu giá trị đó chuyển sang giá trị boolean là True thì yield, nếu không thì bỏ qua

Chúng ta đến với ví dụ để hiểu thêm. Đầu tiên sẽ có chức năng bằng một ví dụ bộ lọc lấy các số dương [lớn hơn 0]

>>> func = lambda x: x > 0
>>>
>>> kteam = [1, -3, 5, 0, 2, 6, -4, -9]
>>> list[filter[func, kteam]]
[1, 5, 2, 6]

Hàm func nhận vào 1 giá trị, nếu giá trị đó lớn hơn 0 thì trả về True, còn không thì là Sai nhờ toán tử so sánh. Do đó, các giá trị gửi vào mà nhận giá trị sai là không mang lại kết quả

Nếu bạn nào còn mông lung thì hãy xem qua danh sách hiểu tương đương với hàm filter trên

________số 8

Tiếp theo là một ví dụ khác khi ta gửi Không thay vì một chức năng

>>> kteam = [0, None, 1, 'Kteam', '', 'Free Education', 69, False]
>>> list[filter[None, kteam]]
[1, 'Kteam', 'Free Education', 69]

hàm giảm

Bất kỳ giá trị nào khi chuyển đổi qua giá trị boolean mà Sai thì sẽ không mang lại kết quả. Đơn giản phải không nào?. D

Lưu ý. With these you used Python 2. X, hàm reduce là hàm có sẵn, bạn chỉ sử dụng, còn với Python 3. X, nó đã được đưa vào functools thư viện. Vì thế nếu bạn muốn sử dụng nó, đừng quên nhập nhé

từ funcools nhập giảm

Ở các ví dụ tiếp theo, thì sẽ không có dòng này vì lặp lại nên bạn đọc coi như chúng ta đã có dòng lệnh này ở đầu chương trình tức thời có nghĩa là chúng ta đã nhập hàm reduce từ functools thư viện rồi.

Hàm này khá phức tạp, các bạn không cần phải nóng lên để hiểu nó. Ta hãy đến với cú pháp của nó

giảm [hàm, trình tự [, ban đầu]]

Lưu ý. Hàm giảm không giống như hai hàm trước được trả về một biểu thức trình tạo mà là một giá trị

Để đơn giản nhất, chúng ta hãy tạm quên truy cập tham số ban đầu

Đầu tiên, hàm reduce sẽ lần lượt lấy hai giá trị đầu tiên của dãy [chỉ số 0, chỉ số 1] và đưa vào hàm hàm

Lưu ý. đưa ra theo thứ tự [chỉ mục 0, chỉ mục 1]

Hàm này sẽ trả về một giá trị [ta ký hiệu là A]. Sau đó lấy tiếp giá trị thứ ba của dãy [chỉ mục 2], rồi gửi vào hàm cũng theo thứ tự [A, chỉ mục 2], rồi lặp lại như thế cho đến khi hết dãy

Hãy đến với các ví dụ để hiểu rõ hơn

Ví dụ dùng reduce để tính tổng các số trong danh sách

>>> def mymap[func, iterable]:
..     for x in iterable:
..             yield func[x]
0

Ví dụ dùng reduce để tính các số trong danh sách

>>> def mymap[func, iterable]:
..     for x in iterable:
..             yield func[x]
1

Nào, giờ chúng ta bước tới khi có đối số cho tham số ban đầu. Khi lừa, khi chưa có chữ cái đầu tiên, hàm giảm lấy hai giá trị để lừa vào chức năng đầu tiên. Nhưng khi bạn đưa đối số vào cho tham số ban đầu thì hàm reduce sẽ lấy giá trị ban đầu và giá trị đầu tiên của dãy [chỉ số 0] được đưa vào hàm và tiếp tục trả về một giá trị, rồi giá trị đó lại tiếp tục với giá trị

Ví dụ để hiểu thêm

>>> def mymap[func, iterable]:
..     for x in iterable:
..             yield func[x]
2

Kết luận

Qua bài viết này, bạn đã biết về hàm ẩn danh lambda

Ở bài tiếp theo, Kteam sẽ nói đến KỸ THUẬT ĐỆ QUY

Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc đóng góp ý kiến ​​của mình để phát triển bài viết tốt hơn. Don't say “Luyện tập – Thử thần – Không sợ khó”

Thảo luận

Nếu bạn gặp bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam. com to get the support from the community

Chủ Đề