images
02/10/2020 09:14 am

Các tips hay cho Python - Phần 1

Cho dù Python có vẻ là ngôn ngữ đơn giản tới mức ai cũng có thể học, nhưng điều ngạc nhiên là khó có thể biết được bạn đang giỏi cỡ nào trong việc thuần thục ngôn ngữ này. Python là ngôn ngữ mà bạn có thể dễ học nhưng để giỏi nó thì không dễ chút nào.

Trong Python, có rất nhiều cách khác nhau để giải quyết bài toán đặt ra, nhưng cũng rất dễ làm sai hoặc chúng ta đi làm lại những gì mà nhiều thư viện chuẩn đã viết sẵn. 


Thật không may là các thư viện của Python lại quá phong phú và hệ sinh thái thì quá khủng khiếp. Có khoảng 2 triệu GB các dòng code module thư viện của Python, và dưới đây là một số gợi ý giúp cho bạn học một số thư viện và gói chuẩn của ngôn ngữ cho các công việc liên quan tới tính toán trong Python.


№1: Đảo ký tự

Cho dù đây là bài toán đơn giản nhưng việc đảo lại một chuỗi kí tự có thể là việc khá tẻ nhạt và buồn chán. Python đơn giản hoá việc này bằng việc cung cấp toán tử được built-in trong ngôn ngữ: 

Ví dụ:

a = "!dlrow olleH"

backward = a[::-1]


Backward = “Hello world!”


№2: Xử lý các phần từ mảng

Trong hầu hết các ngôn ngữ, để truy cập vào các phần tử của mảng ta cần dùng vòng lặp để duyệt qua các phần từ hoặc truy cập vào từng phần tử theo index như sau:


firstdim = array[1]


Trong Python, có một cách đơn giản và nhanh hơn để làm điều này, để lấy danh sách giá trị của mảng và gán vào biến, bạn có thể gán danh sách các biến bằng một mảng với số lượng biến bằng số lượng phần tử của mảng:


array = [5, 10, 15, 20]

five, ten, fift, twent = array


Sau đó ta sẽ có: 

five = 5

ten = 10

fift = 15

twent = 20


№3: Itertools

Nếu bạn lập trình Python, bạn sẽ cần làm quen với itertools, một module với nhiều thư viện chuẩn giúp bạn thao tác nhanh với các mảng. Nó không chỉ giúp cho việc thao tác mảng đơn giản hơn, mà code của bạn có thể chạy nhanh hơn và chuẩn hơn. Ví dụ:


c = [[1, 2], [3, 4], [5, 6]]


# Convert sang mảng 1 chiều:


import itertools as it

newlist = list(it.chain.from_iterable(c))

               

newlist = [1, 2, 3, 4, 5, 6]


№4: Xử lý Unpacking thông minh

Việc lấy các phần tử trong mảng (unpacking) có thể khá phiền toái và mất thời gian. Thật may Python có công cụ giúp bạn. Một ví dụ là bạn có thể dùng toán tử “*” để ghi các dữ liệu biến của mảng sang một mảng mới kiểu như sau:

a, *b, c = [1, 2, 3, 4, 5]

Khi đó:

b = [2,3,4]

               

№5: Enumerate

Bạn có thể chưa biết về Enumerate, nhưng có thể bạn đã làm quen với nó rồi. Enumerate giúp bạn lấy được các index của các giá trị nhất định trong một mảng. Điều này có nhiều ích lợi khi sử dụng Python cho các công việc liên quan tới khoa học dữ liệu.


for i,w in enumerate([1,5,75,63,3]):

  print(i,w)


Kết quả: Bạn được index và giá trị của mảng:

0 1

1 5

2 75

3 63 

4 3


№6: Cắt lát mảng


Việc chia tách mảng thành các phần thật quá dễ trong Python, có khá nhiều công cụ để làm điều này, nhưng có một cách khá hay là đặt tên các lát cắt của mảng. Điều này rất phù hợp với các tính toán số học trong Python:


a = [0, 1, 2, 3, 4, 5]

LASTTHREE = slice(-3, None)

slice(-3, None, None)

print(a[LASTTHREE])


Kết quả: bạn được mảng gồm 3 phần từ cuối:


[3,4,5]


№7: Group Adjacent Lists

        

Bạn có thể sử dụng lambda với zip để nhóm các phần tử liền kề trong một mảng để tạo ra mảng mới. Đây là cách rất tiện lợi và dễ dàng như sau:


a = [1, 2, 3, 4, 5, 6] 

group_adjacent = lambda a, k: zip(*([iter(a)] * k))

x = group_adjacent(a, 3)

list(x)

[(1, 2, 3), (4, 5, 6)]

x=group_adjacent(a, 2)

list(x)

[(1, 2), (3, 4), (5, 6)]

x=group_adjacent(a, 1)

list(x)


№8: next() iteration for generators

Trong nhiều tình huống, bạn có thể truy cập vào các index và lấy các giá trị bằng việc sử dụng biến counter. Tuy nhiên có một cách khác, bạn có thể sử dụng hàm next(). Hàm này sẽ duyệt các phần tử và lưu lại vị trí trong memory. Bạn hãy thử chạy các dòng lệnh sau:


g = (x ** 2 for x in range(10))

print(next(g))

print(next(g))


№9: Counter


Thêm một module nữa trong thư viện chuẩn của Python là collections. Trong collections có hàm Counter giúp cho việc đếm các phần tử rất dễ dàng. Đây là hàm giúp cho việc tính toán số tổng, đếm phần tử hoặc tìm ra các phần tử duy nhất của mảng một cách tiện lợi nhất.

Bạn có thể bảo tôi là: sao không sử dụng Pandas. Tất nhiên Pandas có thể làm được nhưng như thế bạn sẽ thêm một thư viện phụ thuộc khác. Thêm nữa counter của Python có khá nhiều tính năng mà Pandas Series không có. Điều này hữu ích cho khá nhiều tính huống:


A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])

A.Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1})

A.most_common(1)

[(3, 4)]

A.most_common(3)

 [(3, 4), (1, 2), (2, 2)]


№10: Dequeue

Thêm một công cụ tuyệt vời nữa của collections đó là dequeue. Hãy xem ví dụ sau về kiểu dữ liệu này.


import collections

Q = collections.deque()

Q.append(1)

Q.appendleft(2)

Q.extend([3, 4])

Q.extendleft([5, 6])

Q.pop()

Q.popleft()

Q.rotate(3)

Q.rotate(-3)

print(Q)


Kết quả:


deque([5, 2, 1, 3])


Kết luận:

Đó một số cách mà tôi khá hay sử dụng trong lập trình Python. Cho dù một vài thủ thuật có thể ít khi được sử dụng, các thủ thuật trên là khá linh hoạt và hữu ích. May mắn thay, Các thư viện chuẩn của Python có rất nhiều các công cụ tương tự như tôi vừa giới thiệu mà tôi cũng chưa biết hết. Vì thế sẽ có nhiều công cụ mà tôi và bạn sẽ ngạc nhiên về nó.


Mời các bạn đọc thêm bài Lập trình đa luồng với Python.


Bạn muốn học Python, cùng tham khảo khóa học này nhé Python cơ bản và ứng dụng thực tế.


- Tech Zone -

Thư giãn chút nào!!!

Bài viết liên quan