Python — Lập bản đồ, Lọc, Rút gọn
BẢN ĐỒ
Trước tiên, hãy cho chúng tôi hiểu chính xác lý do tại sao chúng tôi cần chức năng bản đồ và cách chức năng này giúp chúng tôi giảm bớt công việc và làm cho mã của chúng tôi hiệu quả hơn.
Giả sử chúng ta có một danh sách để làm việc như bên dưới, nhưng vấn đề với danh sách là tất cả các phần tử có trong danh sách đều ở định dạng chuỗi, vì vậy nếu chúng ta cố gắng thực hiện bất kỳ phép toán số nào, nó sẽ không mang lại kết quả nào.
l1 = ["3","5","9","12","25"]
x = l1[0]+1
print(x)
----------------------------------------------------------------------
-----
TypeError Traceback (most recent call
last)
Input In [1], in <cell line: 2>()
1 l1 = ["3","5","9","12","25"]
----> 2 x = l1[0]+1
3 print(x)
TypeError: can only concatenate str (not "int") to str
Bây giờ, một cách giải quyết vấn đề này là vòng lặp for, chúng ta hãy xem
for i in range(len(l1)):
l1[i] = int(l1[i])
x = l1[0]+1
print(x)
4
Chúng tôi sẽ lấy một danh sách khác gọi là l2 và sẽ thực hiện lại thao tác tương tự.
l2 = ["3","5","9","12","25"]
l2 = list(map(int,l2))
y = l2[0]+1
print(y)
4
Bây giờ chúng ta cũng hãy xem xét một vài ví dụ khác, giả sử chúng ta muốn tìm các giá trị bình phương của toàn bộ danh sách, hãy xem cách chúng ta có thể làm điều đó với sự trợ giúp của hàm map.
Đầu tiên, hãy viết một hàm 'sq' sẽ trả về giá trị bình phương của một số đã cho
def sq(a):
return a*a
l3 = [3,5,7,2,9]
l4 = list(map(sq,l3))
print(l4)
[9, 25, 49, 4, 81]
Bây giờ chúng ta hãy xem xét một cái gì đó phức tạp hơn, những gì chúng ta đang cố gắng đạt được bây giờ là lấy bình phương và lập phương của các số từ 0,8, được lưu trữ trong một danh sách. Bây giờ chúng ta sẽ sử dụng hàm map, hàm lambda và cả từ khóa def để mô tả hàm square và cube. Sau đó, chúng ta sẽ sử dụng vòng lặp for để tạo danh sách.
def sq(a):
return a*a
def cube(a):
return a*a*a
func = [sq,cube]
for i in range(8):
rslt = list(map(lambda x:x(i) ,func))
print(rslt)
[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]
[25, 125]
[36, 216]
[49, 343]
Như tên cho thấy, chức năng bộ lọc giúp chúng tôi lọc một tập hợp các lần lặp đã cho, làm đối số, nó lấy hàm đã nêu dựa trên đó chúng tôi sẽ lọc các lần lặp của mình và sau đó nó lấy chính các lần lặp đó làm đối số. Bên dưới có 3 loại bộ lọc, một loại sẽ lọc các số lớn hơn 10 khỏi danh sách, một loại sẽ lọc các số nhỏ hơn 10 và một loại sẽ có nhiều điều kiện cho biết số đó phải lớn hơn 10 nhưng nhỏ hơn 15.
l1 = [34,12,5,8,11,14,19,10,1,50]
def grt_condi(num):
return num>10
def lsr_condi(num):
return num<10
def multi_condi(num):
return num>10 and num<15
l2 = list(filter(grt_condi,l1))
l3 = list(filter(lsr_condi,l1))
l4 = list(filter(multi_condi,l1))
print(l2)
print(l3)
print(l4)
[34, 12, 11, 14, 19, 50]
[5, 8, 1]
[12, 11, 14]
Hãy hiểu chức năng reduce làm gì và nó giải quyết vấn đề gì, để hiểu điều này, trước tiên chúng ta hãy xem một tuyên bố vấn đề và cách giải quyết vấn đề truyền thống của chúng ta.
Giả sử có một danh sách và chúng tôi muốn lấy tổng của tất cả các số nguyên có trong danh sách
l6 = [2,3,6,5,8,9,10]
x = 0
for i in l6:
x = x+i
print(x)
43
from functools import reduce
l7 = reduce(lambda x,y:x+y , l6)
print(l7)
43
Để biết thêm nội dung như vậy, vui lòng theo dõi hồ sơ Trung bình và trang LinkedIn của tôi -https://www.linkedin.com/in/chandan-sengupta/

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































