Python hải mã điều hành xấu

(1 nguồn mở cho phép bạn tạo và chia sẻ các mã trực tiếp, phương trình, hiệu ứng hình ảnh cũng như các văn bản, v. v. ). Nếu bạn có hứng thú với các loại dự án như thấm, thì hãy tiếp tục truy cập repo GitHubnhé. Mình sẽ rất coi trọng sự giúp đỡ này

Tìm việc làm python lương cao

Các Vấn đề thường gặp  

Trong phần này, chúng ta sẽ xem xét thử các kịch bản phổ biến khác nhau thường phát sinh và làm thế nào để giải quyết chúng bằng mã Python. Đặc biệt, mình sẽ chia sẻ qua lời giải thích rút gọn về vấn đề với 1 danh sách các giải pháp với code Python. Sau đó mình sẽ link tất cả các nguồn tài nguyên mà mình có.  

Python hải mã điều hành xấu
Python hải mã điều hành xấu

Reverse Dictionary

Đôi khi chúng ta có 1 từ điển trong tay và muốn có thể nhảy tới đúng khóa và giá trị của nó. Tất nhiên, có nhiều mối lo lắng như “làm cách nào để chúng ta có thể đối đầu với các ‘giá trị nhân bản’?” . Điều đó nói rằng, trong các trường hợp đơn giản, sẽ có một vài cách hóa giải

# Use to invert dictionaries that have unique values
my_inverted_dict = dict(map(reversed, my_dict.items()))

# Use to invert dictionaries that have unique values
my_inverted_dict = {value: key for key, value in my_dict.items()}

# Use to invert dictionaries that have non-unique values
from collections import defaultdict
my_inverted_dict = defaultdict(list)
{my_inverted_dict[v].append(k) for k, v in my_dict.items()}

# Use to invert dictionaries that have non-unique values
my_inverted_dict = dict()
for key, value in my_dict.items(): 
  my_inverted_dict.setdefault(value, list()).append(key)

# Use to invert dictionaries that have lists of values
my_dict = {value: key for key in my_inverted_dict for value in my_map[key]}

Để hiểu rõ hơn, hãy xem thử bài viết của mình có tiêu đề “Cách đảo ngược từ điển trong Python”. Nó bao gồm cách giải thích cho từng giải pháp, hiệu suất số liệu và khi chúng có thể áp dụng được. Ngoài ra, mình còn có 1 video Youtube, cũng cover cùng đề tài này luôn.

Cộng các phần tử của 2 danh sách

Hãy nói rằng bạn có 2 danh sách và bạn muốn hợp nhất chúng lại với nhau thành 1 danh sách giống nhau. Nói cách khác, bạn muốn thêm phần tử đầu tiên của danh sách thứ 1 vào phần tử đầu tiên của danh sách thứ 2 và lưu trữ kết quả trong 1 danh sách mới. Vâng, có vài cách để thực hiện điều này.

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)

Nếu bạn muốn hiểu sâu hơn, hãy xem thử bài viết mang tiêu đề “Cách tính tổng các phần tử của hai danh sách trong Python” của . Aren going to 1 try the thú vị. Ngoài ra, bạn cũng có thể nhận một vài thứ bổ ích từ video Youtube với cùng chủ đề của mình.

Kiểm tra 1 File có Tồn tại

Một trong những đặc quyền tuyệt vời của Python là nhờ sự quản lý các tệp của nó 1 cách dễ dàng. Không giống Java, Python có sẵn 1 cú pháp cho việc đọc và viết 1 file.
Kết quả là, kiểm tra 1 tệp nếu nó tồn tại là 1 nhiệm vụ khá đơn giản.

# Brute force with a try-except block (Python 3+)
try: 
  with open('/path/to/file', 'r') as fh: 
    pass
except FileNotFoundError: 
  pass

# Leverage the OS package (possible race condition)
import os 
exists = os.path.isfile('/path/to/file')

# Wrap the path in an object for enhanced functionality
from pathlib import Path
config = Path('/path/to/file') 
if config.is_file(): 
  pass

Luôn luôn, bạn có thể tìm hiểu thêm về các giải pháp trong bài của mình dựa trên “Cách kiểm tra xem tệp có tồn tại trong Python hay không”, vốn đi cùng 3 giải pháp và các metric hiệu suất.

Chuyển đổi 2 Danh sách thành 1 Từ điển

Trước đó, chúng ta đã nói về Danh sách Gộp 2 trong Python. Cũng như hóa ra là, có rất nhiều thứ chúng ta có thể làm với 2 danh sách. Ví dụ. chúng ta có thể thử map 1 cái trên 1 cái khác để tạo từ điển.

Đầy đủ như các vấn đề này, có 1 vài sự sợ hãi ở đây. Ví dụ. Sẽ ra sao nếu 2 list không cùng 1 size? .

column_names = ['id', 'color', 'style']
column_values = [1, 'red', 'bold']

# Convert two lists into a dictionary with zip and the dict constructor
name_to_value_dict = dict(zip(column_names, column_values))

# Convert two lists into a dictionary with a dictionary comprehension
name_to_value_dict = {key:value for key, value in zip(column_names, column_values)}

# Convert two lists into a dictionary with a loop
name_value_tuples = zip(column_names, column_values) 
name_to_value_dict = {} 
for key, value in name_value_tuples: 
  if key in name_to_value_dict: 
    pass # Insert logic for handling duplicate keys 
  else: 
    name_to_value_dict[key] = value

1 lần nữa, bạn có thể tìm cách giải thích cho từng giải pháp trong bài “Cách chuyển đổi hai danh sách thành từ điển trong Python” của mình. Nếu bạn là 1 người trực quan, bạn có thể sẽ kết video Youtube của mình, với nội dung bao gồm danh sách ánh xạ tới các từ điển.

Kiểm tra Nếu 1 Danh sách trống (Trống)

Nếu bạn đang sử dụng 1 ngôn ngữ thuộc loại  “statical” như Java hay C, bạn có thể lo sợ do thiếu các loại tĩnh trong Python. Mình cam đoan rằng, việc không mê mẩn về các loại của biến có thể gây khó chịu 1 vài lúc, nhưng không sao vì đã có vài “perk” – đặc quyền bên cạnh. Ngay lập tức, chúng ta có thể kiểm tra xem 1 Danh sách đang trống do loại cơ động (tính linh hoạt) của riêng nó – bên cạnh phương pháp khác.

my_list = list()

# Check if a list is empty by its length
if len(my_list) == 0: 
  pass # the list is empty

# Check if a list is empty by direct comparison (only works for lists)
if my_list == []: 
  pass # the list is empty

# Check if a list is empty by its type flexibility **preferred method**
if not my_list: 
  pass # the list is empty

Nếu bạn lại muốn tìm hiểu thêm về 3 cách giải quyết này, hãy 'kiểm tra' tiêu đề “Cách kiểm tra xem Danh sách có trống trong Python hay không”, cũng như video Youtube có cùng chủ đề.

Tạo Bản sao (nhân bản) cho 1 Danh sách

1 trong những đối tượng (subject) yêu thích của mình trong lập trình chính là ‘sao chép các loại dữ liệu – sao chép các loại dữ liệu’. Sau tất cả, không có gì là dễ dàng trong thế giới dựa trên sự tương quan – dựa trên tham chiếu mà ta đang sống, và điều này cũng tương tự trong Python. May mắn thay, nếu ta muốn sao chép 1 danh sách, có vài cách để thực hiện điều này

my_list = [27, 13, -11, 60, 39, 15]

# Clone a list by brute force
my_duplicate_list = [item for item in my_list]

# Clone a list with a slice
my_duplicate_list = my_list[:]

# Clone a list with the list constructor
my_duplicate_list = list(my_list) 

# Clone a list with the copy function (Python 3.3+)
my_duplicate_list = my_list.copy() # preferred method

# Clone a list with the copy package
import copy
my_duplicate_list = copy.copy(my_list)
my_deep_duplicate_list = copy.deepcopy(my_list)

# Clone a list with multiplication?
my_duplicate_list = my_list * 1 # do not do this

Khi nói đến ‘nhân bản’, việc nhận thức về sự khác biệt giữa bản sao nông và bản sâu (bản nông & bản sâu) khá quan trọng. May mắn thay (1 lần nữa), mình đã có 1 bài viết cover về chủ đề này.

Cuối cùng, bạn có thể tìm hiểu thêm về các cách giải quyết để đưa danh sách lên trên trong bài viết “Cách sao chép danh sách trong Python”. Thêm nữa, có thể bạn sẽ thấy video Youtube mang tiêu đề “7 cách sao chép danh sách bằng Python có chim cánh cụt Pittsburgh” của mình khá hữu ích.

Khôi phục mục sau cùng của 1 Danh sách

(Truy xuất mục cuối cùng của danh sách)

Vì chúng có chung chủ đề tài liệu của các danh sách, hãy nói về việc truy xuất mục sau cùng của 1 danh sách. Trong hầu hết các ngôn ngữ, điều này khá liên quan đến một số biểu thức toán học phức tạp liên quan đến độ dài của danh sách. Và nếu mình nói với bạn rằng có vài giải pháp thú vị trong Python thì bạn thấy thế nào?

my_list = ['red', 'blue', 'green']

# Get the last item with brute force using len
last_item = my_list[len(my_list) - 1]

# Remove the last item from the list using pop
last_item = my_list.pop() 

# Get the last item using negative indices *preferred & quickest method*
last_item = my_list[-1]

# Get the last item using iterable unpacking
*_, last_item = my_list

Như trên, hãy đọc thêm bài viết “Cách lấy mục cuối cùng của danh sách trong Python”, kèm theo thử thách, hiệu năng số liệu và dĩ nhiên rồi, 1 . video Youtube về nó.

Tạo 1 Khóa tắt cho Script Python

Đôi khi bạn tạo 1 tập lệnh, bạn sẽ muốn chạy nó 1 cách thuận tiện bằng cách nhấp vào 1 nút. Dĩ nhiên rằng, có vài cách để thực hiện nó.

Đầu tiên, chúng ta có thể tạo 1 lối tắt Windows với thiết lập như sau.

\path\to\trc-image-titler.py -o \path\to\output

Bên cạnh, chúng ta cũng có thể tạo 1 file batch với đoạn mã sau đây

________số 8

Cuối cùng, chúng ta có thể tạo 1 lô tập lệnh với mã sau

#!/bin/sh
python /path/to/trc-image-titler.py -o /path/to/output

Nếu bạn đang tìm kiếm giải pháp chi tiết hơn, hãy xem thử bài “Cách tạo lối tắt tập lệnh Python bằng đối số”.

Sắp xếp 1 Danh sách các Chuỗi

Sắp xếp là 1 nhiệm vụ thông thường mà bạn sẽ được mong đợi để biết cách khai triển triển khai thực hiện trong ngành Khoa học Máy tính. Cho dù việc sắp xếp các thuật toán trong hầu hết các chương trình giảng dạy cần sự tập trung cao độ, không ai sẽ nói cho bạn biết về mức độ phức tạp mà việc sắp xếp lại. Ví dụ. sắp xếp các chuỗi con số khá đơn giản, vậy còn việc sắp xếp các chuỗi sẽ ra sao? .   

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
0

Nếu bạn muốn tìm hiểu xem các giải pháp này sẽ phát huy tác dụng như thế nào, hay chỉ đơn giản là muốn biết thêm các rủi ro tiềm ẩn, hãy xem thử bài “ . ”.

Partition 1 Table

(Phân tích cú pháp bảng tính)
1 trong các trường hợp sử dụng thú vị cho Python là vì 'khoa học dữ liệu'. Nhưng không thể, tuy nhiên, điều đó có nghĩa là bạn phải xử lý rất nhiều 'dữ liệu thô' trong các định dạng khác nhau như tệp văn bản và bảng tính. May mắn thay, Python có nhiều tiện ích được tích hợp sẵn cho việc đọc các định dạng tệp khác nhau. Ví dụ, chúng ta có thể phân tích 1 bảng tính 1 cách dễ dàng bằng cách.

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
1

Trong trường hợp này, chúng ta có thể lấy đầu ra của mình trong danh sách các từ điển. Nếu bạn muốn biết thêm về cách hoạt động của công việc này, hãy xem bài viết đầy đủ “Cách phân tích bảng tính bằng Python” của mình.

Sắp xếp 1 List of Dictionary

1 khi bạn đã có 1 danh sách các từ điển, bạn có thể muốn tổ chức chúng trong một vài trật tự cụ thể. Ví dụ. if the dictionary has 1 key for date, we could try to sort them by thethứ tự theo niên đại. May thay, sắp xếp là một nhiệm vụ tương đối nhẹ nhàng.  

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
2

Các cách giải thích và nhiều chú ý thú vị hơn trong bài “Cách sắp xếp danh sách từ điển trong Python“

Viết 1 Danh sách Hiểu

1 trong những đề tài Python yêu thích của mình là nói về khả năng hiểu danh sách. Như những ai đã có thời gian dài sử dụng các ngôn ngữ như Java, C/C++ và C#, mình chưa từng thấy thứ gì giống như là 1 sự hiểu biết danh sách cho tới khi mình tập tành với Python. Giờ đây, mình khá là cuốn hút với chúng ta. Kết quả là, mình đã đặt chúng cùng nhau trong 1 danh sách toàn bộ.

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
3

Xem thêm về cách giải thích chính thức về tất cả các mã này trong bài “Cách viết hiểu danh sách bằng Python”. Như một món quà khuyến mãi, mình có 1 video Youtube, chia sẻ vài ví dụ về hiểu danh sách

Từ điển Gộp 2

Trong bộ sưu tập này, ta đã nói rất nhiều về việc xử lý các cấu trúc dữ liệu như danh sách và từ điển. Vâng, cái này cũng sẽ tương tự. Cụ thể hơn là, chúng ta đang xem về việc làm 2 từ điển lại với nhau. Dĩ nhiên, việc hợp nhất 2 từ điển sẽ mang lại một số rủi ro. Ví dụ. Nếu có các key bị lặp (duplicate key) thì sẽ ra sao? .

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
4

Nếu bạn cũng thích, mình có 1 bài vốn cover đúng chủ đề tài liệu này với tên “How to Merge Two Dictionaries in Python”, kèm theo 4 giải pháp cũng như hiệu năng số liệu.

Định dạng 1 Chuỗi

Dù thích hay không, chúng ta cũng sẽ tự thấy rằng mình mình hay chen lấn lệnh in xuyên suốt dòng code để mục đích gỡ lỗi nhanh hơn. Sau tất cả, 1 lệnh in được đặt đúng chỗ có thể giúp bạn tiết kiệm thời gian khá nhiều. Tuy nhiên, không phải lúc nào điều này cũng dễ dàng và thuận tiện để hiển thị đúng thứ ta muốn. Nhưng không sao cả, Python có khá nhiều lựa chọn cho ‘format’.  

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
5

Hãy nghĩ rằng các giải pháp này không cần thiết phải được sử dụng với lệnh in. Nói cách khác, bạn cứ thoải mái sử dụng các cách giải trí này như f-string ở bất kỳ đâu mà bạn cần

Bài viết “Cách định dạng chuỗi trong Python” sẽ giúp bạn hiểu thêm. Nếu bạn thích sử dụng các 'đoạn trích' này, đừng quên kiểm tra video Youtube của mình, có tiêu đề là “6 cách định dạng chuỗi trong Python có tính năng của tôi .

Đi cùng với các dòng tương tự như định dạng chuỗi, đôi lúc bạn chỉ cần in trên cùng 1 dòng trong Python. Cũng như lệnh “ print “ hiện tại được thiết kế, nó tự động áp dụng 1 dòng mới tới chuỗi cuối cùng của bạn. Có thể thay, có 1 vài cách bên cạnh đó

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
6

Xem thêm về các giải pháp này tại bài viết “Cách in trên cùng một dòng trong Python” cho các cách sử dụng khác nhau và lưu ý của nó.  

Kiểm tra năng lực

Cuối cùng, bạn double lúc chỉ muốn so sánh 1 vài đoạn mã. Và Python có một số lựa chọn đơn giản dành cho bạn.  

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
  ethernet_devices[0] + usb_devices[0], 
  ethernet_devices[1] + usb_devices[1], 
  ethernet_devices[2] + usb_devices[2], 
  ethernet_devices[3] + usb_devices[3], 
  ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)
7

Đừng quên xem thêm bài viết đầy đủ “How to Performance Test Python Code” này nhé

Hãy chia sẻ những rắc rối của bạn