Hướng dẫn boolean list comprehension python - boolean danh sách hiểu python

Tôi đang cố gắng tạo ra một danh sách hiểu được từ một vòng lặp cho các câu lệnh IF và tôi không thể tìm ra nó. Tôi đã quét Internet trong nhiều giờ nhưng không thể tìm thấy một giải pháp.

Show

Vòng lặp trông như thế:

lengths = []
data_frame = p.read_excel(fasta_path_[:-2] + 'xlsx', engine='openpyxl')
seqids = data_frame['qseqid'].tolist()
identical_ids = None

with open(fasta_path_, 'r') as fasta_file:
    for line in fasta_file.readlines():
        if identical_ids is True:
            lengths.append(len(line.strip()))
        for seq_id in seqids:
            if seq_id in line:
                identical_ids = True
                continue
            else:
                identical_ids = False
                continue

Nỗ lực cuối cùng của tôi:

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]

Chỉnh sửa

Sau khi chạy và sửa mã nhiều lần, có vẻ như kết quả cuối cùng không thể được viết dưới dạng hiểu biết danh sách:

seqids = p.read_csv(csv_path, usecols=['qseqid'])
seqids = seqids['qseqid'].tolist()
queries_lengths = []
count = 0
id_in_tag_line = None
with open(fasta_path_, 'r') as fasta_file:
    for line in fasta_file.readlines():
        if count < len(seqids) and seqids[count] in line:
            id_in_tag_line = True
            count += 1
            continue
        if id_in_tag_line:
            queries_lengths.append(len(line))
            id_in_tag_line = None

Vì hai danh sách được sử dụng trong mã này rất lớn, nên vòng lặp chạy khoảng 30.000, vì vậy thay vì sử dụng một vòng lặp cho vòng lặp, tôi đã sử dụng một bộ đếm.

Nếu bất cứ ai nghĩ rằng có một cách (hoặc nhu cầu) để viết nó như một sự hiểu biết danh sách, tôi rất thích nghe những ý tưởng mới.

Nội dung chính

Nội dung chính

  • List comprehension trong Python là gì
  • Sử dụng list comprehension để tạo list trong Python
  • Cú pháp list comprehension trong python
  • Ví dụ cụ thể về sử dụng list comprehension trong python
  • Sử dụng hàm tự tạo trong List comprehension python
  • Sử dụng list comprehension trong Python kèm với hàm IF
  • Tổng kết và thực hành

  • List comprehension trong Python là gì
  • Sử dụng list comprehension để tạo list trong Python
  • Cú pháp list comprehension trong python
  • Ví dụ cụ thể về sử dụng list comprehension trong python
  • Sử dụng hàm tự tạo trong List comprehension python
  • Sử dụng list comprehension trong Python kèm với hàm IF
  • Tổng kết và thực hành

List comprehension trong Python là một cách viết đặc biệt của python, do đó nếu bạn chưa quen với cách viết này thì có thể cảm thấy khó hiểu đấy. Nhưng một khi đã quen rồi, Kiyoshi đảm bảo bạn sẽ nghiện nó luôn đấy và không còn muốn viết theo cách phổ thông nữa đâu.Với những lợi thế về khả năng xử lý cũng như khả năng rút gọn code, bạn sẽ có cơ hội gặp cách viết này nhiều trong các dự án viết bằng python. Thế nên trăm hay không bằng tay quen, hãy làm chủ List comprehension trong Python bằng cách thực hành lại các ví dụ ngày hôm nay đi nhé.List comprehension trong Python là gì cũng như cách sử dụng List comprehension để tạo list sau bài học này.

List comprehension trong Python là gì

Sử dụng list comprehension để tạo list trong Python hay còn gọi là phương pháp viết nội hàm là một phương pháp đặc biệt chỉ có trong python mà không có trong bất kỳ ngôn ngữ nào khác, giúp bạn có thể tạo list trong python một cách cực kỳ đơn giản.

Khi làm việc với list, sẽ có những lúc bạn cần phải thao tác với những list có cấu trúc phức tạp, mà với phương pháp tạo list thông thường, bạn sẽ cần rất nhiều dòng code để có thể khởi tạo được chúng.

Nhưng những nhà sáng lập ra python với tôn chí python là Đơn giản thì tốt hơn phức tạp, đã tạo ra list comprehension-phương pháp đặc biệt chỉ python mới có, nhằm giúp bạn có thể rút gọn các dòng code cần thiết và tạo ra một list phức tạp chỉ trong nháy mắt.list comprehension-phương pháp đặc biệt chỉ python mới có, nhằm giúp bạn có thể rút gọn các dòng code cần thiết và tạo ra một list phức tạp chỉ trong nháy mắt.

Ngoài khả năng rút gọn các dòng code cần viết, tốc độ xử lý của phương pháp list comprehension trong Python cũng được cho là nhanh hơn các phương pháp khác.

Sử dụng list comprehension để tạo list trong Python

Cú pháp list comprehension trong python

Như ở phần định nghĩa Kiyoshi đã nói qua, chúng ta sử dụng list comprehension trong python chủ yếu để tạo list trong python.

List comprehension không những giúp chúng ta tạo ra các list đơn giản, mà còn có thể tạo ra các list đa chiều có cấu trúc phức tạp mà với các phương pháp tạo list thông thường, bạn cần rất nhiều xử lý để hoàn thành được nó.

Chúng ta sử dụng list comprehension trong Python để tạo list với cú pháp sau đây:sử dụng list comprehension trong Python để tạo list với cú pháp sau đây:

[

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
5 for
lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
6 in
lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
7]

Trong đó:

  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    7 là một đối tượng chứa nhiều phần tử trong python, ví dụ như một list, tuple, range hay set.
  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6 là một biến để gán giá trị phần tử lấy ra từ
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    7.
  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    5 là một biểu thức để tính toán với biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6.

Về quy trình xử lý:

  1. Chúng ta dùng lệnh for để lấy ra lần lượt các phần tử có trong
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    7 và gán giá trị phần tử đó vào biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6.
  2. Chúng ta dùng biểu thức
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    5 để tính toán với biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6 và đưa ra một kết quả.
  3. Kết quả trên được dùng để tạo một phần tử trong list mới.

Hãy cùng xem một số ví dụ về cách sử dụng list comprehension để tạo list trong Python sau đây.

Ví dụ cụ thể về sử dụng list comprehension trong python

Tạo một list gồm các số từ 1 đến 5

Cách thông thường:

old_list = list(range(0,6))
comprehension_list = []

for phantu in old_list:
comprehension_list.append(phantu)

Sử dụng list comprehension trong python:

comprehension_list = [number for number in range(0,6)]

Cả hai đều đưa ra cùng kết quả:

print(comprehension_list)

Bạn thấy đó, cùng một kết quả nhưng với việc sử dụng list comprehension đã giúp chúng ta rút gọn code, giảm đi bao nhiêu là công sức rồi đấy.

Tạo một list có phần tử là bình phương các số từ 1 đến 5

Cách thông thường:

old_list = list(range(0,6))
comprehension_list = []

for phantu in old_list:
phantu_moi = phantu**2
comprehension_list.append(phantu_moi)

Sử dụng list comprehension trong python:

comprehension_list = [number**2 for number in range(0,6)]

Cả hai đều đưa ra cùng kết quả:

print(comprehension_list)

Bạn thấy đó, cùng một kết quả nhưng với việc sử dụng list comprehension đã giúp chúng ta rút gọn code, giảm đi bao nhiêu là công sức rồi đấy.

Tạo một list có phần tử là bình phương các số từ 1 đến 5

Cả hai đều cho ra cùng kết quả:

list_thanhpho = ['Long An', 'Ha Noi','Nam Dinh']
list_thanhpho_thuong = [thanhpho.lower() for thanhpho in list_thanhpho]

print(list_thanhpho_thuong)

Cho một list gồm các string khác nhau, tạo ra một list mới với các string ở định dạng LOWER (viết thường)
Thế nhưng với list comprehension, bạn cũng chỉ cần một dòng code thôi là giải quyết được vấn đề rồi đó.
IT’S SO COOL

Để giải quyết bài toán này, chúng ta cần kết hợp phương thức lower() giúp chuyển chữ hoa thành chữ thường trong chuỗi python.

Chúng ta sử dụng list comprehension trong python như sau:
Ngoài cách dùng hàm tích hợp sẵn, bạn cũng có thể sử dụng hàm tự tạo để chỉ định biểu thức tính toán trong List comprehension python giống như ví dụ sau đây:

Bạn có thể thấy với cách viết thông thường, biểu thức càng phức tạp thì số dòng chúng ta cần code sẽ lại càng tăng lên.Thế nhưng với list comprehension, bạn cũng chỉ cần một dòng code thôi là giải quyết được vấn đề rồi đó.IT’S SO COOL

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
0

Sử dụng hàm tự tạo trong List comprehension python.

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
1

Ở phần trên chúng ta đã dùng các hàm tích hợp sẵn trong python như seqids = p.read_csv(csv_path, usecols=['qseqid']) seqids = seqids['qseqid'].tolist() queries_lengths = [] count = 0 id_in_tag_line = None with open(fasta_path_, 'r') as fasta_file: for line in fasta_file.readlines(): if count < len(seqids) and seqids[count] in line: id_in_tag_line = True count += 1 continue if id_in_tag_line: queries_lengths.append(len(line)) id_in_tag_line = None 7,seqids = p.read_csv(csv_path, usecols=['qseqid']) seqids = seqids['qseqid'].tolist() queries_lengths = [] count = 0 id_in_tag_line = None with open(fasta_path_, 'r') as fasta_file: for line in fasta_file.readlines(): if count < len(seqids) and seqids[count] in line: id_in_tag_line = True count += 1 continue if id_in_tag_line: queries_lengths.append(len(line)) id_in_tag_line = None 8, cộng trừ nhân chia v.v… trong các biểu thức tính toán.Ngoài cách dùng hàm tích hợp sẵn, bạn cũng có thể sử dụng hàm tự tạo để chỉ định biểu thức tính toán trong List comprehension python giống như ví dụ sau đây:

Cho một list số nguyên. Hãy tạo một list số mới có phần tử là luỹ thừa của các số trong list cũ
Lúc này, chỉ khi nào biểu thức điều kiện của hàm if đúng, thì vòng lặp for mới được chạy để tạo phần tử cho list mới.
Cú pháp viết sẽ như sau đây:

Cho danh sách tên các con vật, tạo ra một danh sách mới chứa tên các con vật có 4 chân.

Trong đó:

  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    7 là một đối tượng chứa nhiều phần tử trong python, ví dụ như một list, tuple, range hay set.
  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6 là một biến để gán giá trị phần tử lấy ra từ
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    7.
  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    5 là một biểu thức để tính toán với biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6.
  • lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    5 là một biểu thức để tính toán với biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6.

Về quy trình xử lý:

  1. Chúng ta dùng lệnh for để lấy ra lần lượt các phần tử có trong
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    7 và gán giá trị phần tử đó vào biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6.
  2. Chúng ta dùng biểu thức
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    5 để tính toán với biến
    lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
    
    6 và đưa ra một kết quả.
  3. Kết quả trên được dùng để tạo một phần tử trong list mới.
  4. Kết quả trên được dùng để tạo một phần tử trong list mới.

Hãy cùng xem ví dụ cụ thể sau đây:

Tạo một list mới chứa các số chẵn từ một list số ban đầu

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
2

Bạn có thể kết hợp tạo list bằng hàm range và viết ví dụ trên cực ngắn như sau:

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
3

Cả hai đều đưa ra cùng một kết quả:

lengths = [len(line.strip()) for line in fasta_file.readlines() if identical_ids for seq_id in seqids if seq_id in line identical_ids := True else identical_ids := False]
4
  • Ở đây chúng ta dùng ký hiệu
    comprehension_list = [number for number in range(0,6)]
    7 để lấy số dư trong một phép chia. Hãy tìm hiểu thêm tại Toán tử số học trong python
  • Bạn có thể xem thêm về cách tạo list mới bằng hàm range ở bài Tạo list từ iterable trong python

Tổng kết và thực hành

List comprehension trong Python là một cách viết đặc biệt của python, do đó nếu bạn chưa quen với cách viết này thì có thể cảm thấy khó hiểu đấy. Nhưng một khi đã quen rồi, Kiyoshi đảm bảo bạn sẽ nghiện nó luôn đấy và không còn muốn viết theo cách phổ thông nữa đâu.Với những lợi thế về khả năng xử lý cũng như khả năng rút gọn code, bạn sẽ có cơ hội gặp cách viết này nhiều trong các dự án viết bằng python. Thế nên trăm hay không bằng tay quen, hãy làm chủ List comprehension trong Python bằng cách thực hành lại các ví dụ ngày hôm nay đi nhé. là một cách viết đặc biệt của python, do đó nếu bạn chưa quen với cách viết này thì có thể cảm thấy khó hiểu đấy. Nhưng một khi đã quen rồi, Kiyoshi đảm bảo bạn sẽ nghiện nó luôn đấy và không còn muốn viết theo cách phổ thông nữa đâu.
Với những lợi thế về khả năng xử lý cũng như khả năng rút gọn code, bạn sẽ có cơ hội gặp cách viết này nhiều trong các dự án viết bằng python. Thế nên trăm hay không bằng tay quen, hãy làm chủ List comprehension trong Python bằng cách thực hành lại các ví dụ ngày hôm nay đi nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> python cơ bản - lập trình python cho người mới bắt đầu>>10. list trong python>> python cơ bản - lập trình python cho người mới bắt đầu>>10. list trong python

Bài sau

Hàm list() trong python và cách tạo list từ iterable

Bài tiếp

Ký tự đặc biệt trong python (escape sequence)