Sitelet https://www.datacamp.com/vi/tutorial/python-split-list
Chuyển đến nội dung chính

Cách tách danh sách trong Python: Ví dụ cơ bản và phương pháp nâng cao

Tìm hiểu cách tách danh sách Python với các kỹ thuật như slicing, list comprehension và itertools. Khám phá thời điểm sử dụng từng phương pháp để xử lý dữ liệu tối ưu.
Đã cập nhật 5 thg 10, 2026  · 11 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Danh sách (list) trong Python là kiểu dữ liệu mảng có thể thay đổi (mutable) và động, dùng để lưu trữ các phần tử có thứ tự. Việc tách danh sách là một tác vụ phổ biến trong Python, rất cần thiết để thao tác và phân tích dữ liệu hiệu quả. 

Bạn có thể học thêm về phân tích dữ liệu qua lộ trình nghề nghiệp Data Analyst with Python để nâng cao kỹ năng, đi sâu vào các phương pháp tách danh sách trong Python, kèm ví dụ thực tiễn và thực hành tốt nhất. 

Thành thạo các kỹ thuật này sẽ giúp nâng cao kỹ năng lập trình, khiến script của bạn hiệu quả và dễ bảo trì hơn. Bắt đầu thôi.

Câu trả lời nhanh: Cách tách một list trong Python

  • Cách đơn giản nhất để tách một list trong Python là dùng slicing với toán tử :. Ví dụ, ta có thể tách list như sau: split_list = my_list[:5], thao tác này tách list tại chỉ số thứ năm. 

  • Phần còn lại của bài viết sẽ khám phá các phương pháp khác để tách list, bao gồm list comprehension, itertools, numpy, và hơn thế nữa. Mỗi phương pháp có ưu điểm riêng và phù hợp với các trường hợp sử dụng khác nhau, như bạn sẽ thấy.

Phương pháp phổ biến nhất: tách list bằng slicing

Tách list tại chỉ số bằng Python có lẽ là kỹ thuật phổ biến nhất. Phương pháp slicing giúp list trong Python được tách thành các danh sách con tại chỉ số đã chỉ định. Dưới đây là hướng dẫn từng bước để triển khai slicing trong Python.

  • Định nghĩa List: Giả sử bạn có list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] và muốn tách tại một chỉ số cụ thể n.
  • Xác định chỉ số tách: Chỉ rõ chỉ số n nơi bạn muốn cắt list.
  • Tạo lát cắt đầu tiên: Trong đoạn mã dưới đây, tạo first_slice chứa các phần tử từ đầu list đến trước chỉ số n.
  • Tạo lát cắt thứ hai: Định nghĩa second_slice bao gồm tất cả phần tử từ chỉ số n đến cuối list.
# Define a list of integers from 1 to 10
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Index where the list will be split
n = 4

# Slice the list from the beginning to the nth index (not inclusive)
first_slice = my_list[:n]

# Slice the list from the nth index to the end
second_slice = my_list[n:]

# Print the first slice of the list
print("First slice:", first_slice)

# Print the second slice of the list
print("Second slice:", second_slice)

# Expected output:
# First slice: [1, 2, 3, 4]
# Second slice: [5, 6, 7, 8, 9, 10]

Tìm hiểu về tách danh sách trong Python

Slicing list trong Python là việc trích xuất một danh sách con hoặc nhiều danh sách con từ danh sách chính. Khi bạn muốn tách một list trong Python, bạn cần hiểu cú pháp slicing để xác định đúng danh sách con. Cú pháp slicing là slice[start:stop:step].

  1. Start là chỉ số bắt đầu của lát cắt.
  2. Stop là chỉ số kết thúc của lát cắt.
  3. Step là khoảng nhảy giữa các phần tử (mặc định là 1).
# Define a list of integers from 1 to 10
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Slice the list from index 2 to 7 (index 2 inclusive, index 7 exclusive)
# This will include elements at index 2, 3, 4, 5, and 6
sublist = my_list[2:7]

# Print the sliced sublist
print(sublist) 

# Expected output: [3, 4, 5, 6, 7]

Theo đoạn mã trên, slicing bắt đầu từ chỉ số 2 đến chỉ số 6 vì danh sách con không bao gồm chỉ số 7.

Lợi ích của việc tách list trong Python về khả năng đọc và hiệu suất bao gồm:

  • Đơn giản hóa quản lý dữ liệu: Bằng cách chia dữ liệu thành các phần dễ xử lý, nhà khoa học dữ liệu có thể dễ dàng tách dữ liệu huấn luyện và kiểm thử trong học máy.
  • Tăng tính mô-đun: Viết các hàm với danh sách con cụ thể giúp tăng tính mô-đun cho mã của bạn.
  • Tối ưu hiệu năng: Sử dụng các phần list nhỏ hơn giúp xử lý nhanh hơn so với dùng toàn bộ list.
  • Nâng cao hiệu quả bộ nhớ: Phương pháp này tạo các phần mà không sao chép dữ liệu nền, do đó tiết kiệm bộ nhớ.

Các kỹ thuật khác nhau để tách list trong Python

Có nhiều phương pháp để tách một list trong Python. Dưới đây là các ví dụ thường gặp mà người làm dữ liệu có thể bắt gặp trong thực tế.

Dùng slicing

Tách list bằng slicing trong Python dùng toán tử : để cắt list tại chỉ số. Phương pháp này tận dụng kỹ thuật đánh chỉ số để chỉ định điểm bắt đầu và kết thúc khi cắt.

Các kỹ thuật slicing khác nhau bao gồm:

Slicing với chỉ số dương

Phương pháp này dùng các chỉ số dương, truy cập phần tử trong list từ trái sang phải.

# Define a list of integers from 1 to 10
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Slice the list from index 2 to 7 (index 2 inclusive, index 7 exclusive)
# This will include elements at index 2, 3, 4, 5, and 6
sublist = my_list[2:7]

# Print the sliced sublist
print(sublist) 

# Expected output: [3, 4, 5, 6, 7]

Slicing với chỉ số âm

Phương pháp tách list trong Python này dùng các chỉ số âm, bắt đầu từ phần tử cuối cùng trong list, từ phải sang trái.

# Define a list of integers from 1 to 10
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Slice the list to get the last 5 elements
sublist = my_list[-5:]

# Print the sliced sublist containing the last 5 elements
print(sublist)

# Slice the list to get all elements except the last 3
sublist = my_list[:-3]

# Print the sliced sublist containing all but the last 3 elements
print(sublist)

# Expected output:
# [6, 7, 8, 9, 10]
# [1, 2, 3, 4, 5, 6, 7]

Dùng tham số bước (step)

Cách tiếp cận này dùng bước lấy mẫu cụ thể để tách list khi truy cập các phần tử khác nhau.

# Define a list of integers from 1 to 10
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Slice the list to get every second element, starting from the beginning
sublist = my_list[::2]

# Print the sliced sublist containing every second element
print(sublist) 

# Slice the list to get every second element, starting from index 1
sublist = my_list[1::2]

# Print the sliced sublist containing every second element, starting from index 1
print(sublist) 

# Slice the list to get the elements in reverse order
sublist = my_list[::-1]

# Print the sliced sublist containing the elements in reverse order
print(sublist) 

# Expected output:
# [1, 3, 5, 7, 9]
# [2, 4, 6, 8, 10]
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Bỏ qua chỉ số

Phương pháp này cắt list trong Python bằng cách chỉ trả về các phần tử cần thiết trong một list.

# Define a list of integers from 1 to 10
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Slice the list from the start to index 5 (index 5 not inclusive)
sublist = my_list[:5]

# Print the sliced sublist containing elements from the start to index 4
print(sublist) 

# Slice the list from index 5 to the end
sublist = my_list[5:]

# Print the sliced sublist containing elements from index 5 to the end
print(sublist) 

# Slice the list to get the entire list
sublist = my_list[:]

# Print the sliced sublist containing the entire list
print(sublist) 

# Expected output:
# [1, 2, 3, 4, 5]
# [6, 7, 8, 9, 10]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Dùng list comprehension

List comprehension trong Python cho phép tách list thành các phần dựa trên giá trị của list hiện có.

# Define a function to split a list into chunks of a specified size
def split_list(lst, chunk_size):
    # Use a list comprehension to create chunks
    # For each index 'i' in the range from 0 to the length of the list with step 'chunk_size'
    # Slice the list from index 'i' to 'i + chunk_size'
    return [lst[i:i + chunk_size] for i in range(0, len(lst), chunk_size)]

# Define a list of integers from 1 to 15
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# Split the list into chunks of size 3 using the split_list function
chunks = split_list(my_list, 3)

# Print the resulting list of chunks
print(chunks)

# Expected output:
# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]

Đoạn mã trên dùng cách tách list Python thành n phần có kích thước ba, trả về một list mới gồm các list con 3 giá trị.

Dùng Itertools

Tách list bằng itertools sử dụng mô-đun Python để biến đổi dữ liệu thông qua vòng lặp.

# Import the islice function from the itertools module
from itertools import islice
# Define a function to yield chunks of a specified size from an iterable
def chunks(iterable, size):
    # Create an iterator from the input iterable
    iterator = iter(iterable)
    
    # Loop over the iterator, taking the first element in each iteration
    for first in iterator:
        # Yield a list consisting of the first element and the next 'size-1' elements from the iterator
        yield [first] + list(islice(iterator, size - 1))

# Define a list of integers from 1 to 15
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# Convert the generator returned by the chunks function into a list of chunks
chunked_list = list(chunks(my_list, 3))

# Print the resulting list of chunks
print(chunked_list)

# Expected output:
# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]

Dùng numpy

Thư viện numpy trong Python hữu ích để tách mảng thành các danh sách con. Hàm .array_split() cho phép tách khi chỉ định số phần cần chia.

# Import the numpy library and alias it as np
import numpy as np

# Define a list of integers from 1 to 15
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# Use numpy's array_split function to split the list into 3 chunks
chunks = np.array_split(my_list, 3)

# Convert each chunk back to a regular list and print the resulting list of chunks
print([list(chunk) for chunk in chunks])

# Expected output:
# [[np.int32(1), np.int32(2), np.int32(3), np.int32(4), np.int32(5)], [np.int32(6), np.int32(7), np.int32(8), np.int32(9), np.int32(10)], [np.int32(11), np.int32(12), np.int32(13), np.int32(14), np.int32(15)]]

Tách list thành các phần (chunks)

Hàm Python sau cũng cho phép tách một list thành các phần. Các phần này có thể tuỳ biến tùy theo số lượng mà người dùng yêu cầu.

# Define a function to split a list into chunks of a specified size
def split_into_chunks(lst, chunk_size):
    chunks = []  # Initialize an empty list to store chunks
    
    # Iterate over the list with a step of chunk_size
    for i in range(0, len(lst), chunk_size):
        # Slice the list from index 'i' to 'i + chunk_size' and append it to chunks
        chunks.append(lst[i:i + chunk_size])
    
    return chunks  # Return the list of chunks

# Define a list of integers from 1 to 16
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

# Split the list into chunks of size 4 using the split_into_chunks function
chunks = split_into_chunks(my_list, 4)

# Print the resulting list of chunks
print(chunks)

# Expected output:
# [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

Tách list dựa trên điều kiện

Khi muốn tách một list trong Python, bạn có thể đặt một số quy tắc/điều kiện cho danh sách con. Cách này cho phép tạo danh sách con thỏa các điều kiện đó.

# Define a list of integers from 1 to 15
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# List comprehension to filter elements divisible by 3
div_3 = [x for x in my_list if x % 3 == 0]

# List comprehension to filter elements not divisible by 3
not_div_3 = [x for x in my_list if x % 3 != 0]

# Print the list of elements divisible by 3
print(div_3)

# Print the list of elements not divisible by 3
print(not_div_3)

# Expected output:
# [3, 6, 9, 12, 15]
# [1, 2, 4, 5, 7, 8, 10, 11, 13, 14]

Dùng vòng lặp for

Vòng lặp for cũng có thể được dùng để tách list trong Python dựa trên điều kiện và thông qua lặp.

# Define a function to split a list into sub-lists of size n
def split_by_n(lst, n):
    # Use a list comprehension to create sub-lists
    # For each index 'i' in the range from 0 to the length of the list with step 'n'
    # Slice the list from index 'i' to 'i + n'
    return [lst[i:i + n] for i in range(0, len(lst), n)]

# Define a list of integers from 1 to 15
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# Split the list into sub-lists of size 5 using the split_by_n function
sub_lists = split_by_n(my_list, 5)

# Print the resulting list of sub-lists
print(sub_lists) 

# Expected output:
# [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]

Dùng hàm zip()

Bạn cũng có thể dùng hàm zip() trong Python để tách list thông qua việc ghép cặp.

# Define two lists: list1 containing integers from 1 to 10, and list2 containing letters from 'a' to 'j'
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# Use the zip function to pair corresponding elements from list1 and list2 into tuples
paired = list(zip(list1, list2))

# Print the list of paired tuples
print(paired)

# Expected output:
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'i'), (10, 'j')]

Dùng hàm enumerate()

Hàm enumerate() tách list trong Python dựa trên điều kiện chỉ số. Hàm này dùng vòng lặp để tách list thành các phần bằng nhau.

# Define a list of integers from 1 to 15
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# Define the chunk size for splitting the list
chunk_size = 5

# Create a list of empty lists, one for each chunk
split_list = [[] for _ in range(chunk_size)]

# Iterate over the elements and their indices in my_list
for index, value in enumerate(my_list):
    # Calculate the index of the sublist where the current value should go using modulo operation
    sublist_index = index % chunk_size
    
    # Append the current value to the corresponding sublist in split_list
    split_list[sublist_index].append(value)

# Print the list of sublists after splitting my_list into chunks
print(split_list)

# Expected output:
# [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]]

Tách chuỗi thành list trong Python

Dùng phương thức split()

Phương thức split() tách một chuỗi thành list trong Python dựa trên dấu phân tách được chỉ định. Phương thức trả về các chuỗi con theo số lượng dấu phân tách trong chuỗi.

# Define a string
myString = "Goodmorning to you"

# Split the string into a list of words based on whitespace (default separator)
my_list = myString.split()

# Print the resulting list
print(my_list) 

# Expected output: ['Goodmorning', 'to', 'you']

Dùng phương thức splitlines()

Phương thức splitlines() tách chuỗi thành list trong Python dựa trên ký tự xuống dòng.

# Define a string with newline characters
myString = "Goodmorning\nto\nyou"

# Split the string into a list of lines based on newline characters
my_list = myString.splitlines()

# Print the resulting list
print(my_list)

# Expected output: ['Goodmorning', 'to', 'you']

Dùng phương thức partition()

Phương thức partition() tách chuỗi thành các phần trong Python bằng dấu phân tách cho trước. Phương thức trả về ba phần: chuỗi trước dấu phân tách, chính dấu phân tách, và phần còn lại sau dấu phân tách dưới dạng list.

# Define a string with a delimiter '/'
myString = "Goodmorning/to you"

# Use the partition() method to split the string into three parts based on the first occurrence of '/'
my_list = myString.partition('/')

# Print the resulting tuple
print(my_list)

# Expected output: ('Goodmorning', '/', 'to you')

Dùng biểu thức chính quy

Trong Python, bạn cũng có thể dùng biểu thức chính quy để tách chuỗi thành list. Ví dụ dưới đây minh họa cách thực hiện với khoảng trắng.

# Import the 're' module for regular expressions
import re

# Define a string
myString = "Goodmorning to you"

# Use re.split() to split the string based on whitespace ('\s' matches any whitespace character)
# Returns a list of substrings where the string has been split at each whitespace
my_list = re.split('\s', myString)

# Print the resulting list
print(my_list)

# Expected output: ['Goodmorning', 'to', 'you']

Bảng so sánh

Dưới đây là bảng giúp bạn nhìn nhanh thời điểm các kỹ thuật khác nhau có thể hữu ích. Trên thực tế, cùng một kỹ thuật có thể hoạt động cho nhiều trường hợp mà không khác biệt rõ rệt về hiệu năng, vì vậy phần gợi ý khi nào một kỹ thuật đặc biệt hữu ích có thể hơi phóng đại. 

Kỹ thuật Trường hợp sử dụng Khi nào hữu ích
Slicing Tách list tại một chỉ số hoặc một dải chỉ số cụ thể. Hữu ích cho các phép tách đơn giản, trực tiếp.
List Comprehensions Tạo danh sách con dựa trên giá trị hoặc điều kiện trong list. Hữu ích cho việc tách dựa trên tiêu chí phức tạp hơn.
itertools.islice Tách list thành các phần có kích thước xác định bằng iterator. Hữu ích để xử lý list lớn một cách hiệu quả.
numpy.array_split Tách mảng thành các danh sách con dựa trên số phần cần chia. Hữu ích để xử lý dữ liệu số hiệu quả.
Tách dựa trên điều kiện Tách list dựa trên các điều kiện như tính chia hết. Hữu ích để phân tách dữ liệu thành các danh sách con có ý nghĩa.
Vòng lặp For Duyệt qua list để tạo các danh sách con có kích thước cụ thể. Hữu ích khi cần kiểm soát nhiều hơn quá trình tách.
Hàm zip() Ghép cặp phần tử từ hai list. Hữu ích để kết hợp dữ liệu từ hai list liên quan.
Hàm enumerate() Tách list dựa trên điều kiện chỉ số, thường để tạo các phần bằng nhau. Hữu ích để tạo các danh sách con phân bố đều.
Phương thức split() Tách chuỗi thành list dựa trên dấu phân tách chỉ định. Hữu ích cho xử lý dữ liệu văn bản.
Phương thức splitlines() Tách chuỗi thành list dựa trên ký tự xuống dòng. Hữu ích khi đọc dữ liệu văn bản nhiều dòng.
Phương thức partition() Tách chuỗi thành ba phần dựa trên dấu phân tách chỉ định. Hữu ích cho các kịch bản xử lý văn bản cụ thể.
Biểu thức chính quy Dùng regex để tách chuỗi thành list dựa trên mẫu phức tạp. Hữu ích cho thao tác nâng cao với dữ liệu văn bản.

Lỗi thường gặp và cách tránh

Người làm dữ liệu có thể gặp một số lỗi phổ biến khi xử lý việc tách list trong Python. Dưới đây là một số lỗi thường gặp và cách tránh.

Lỗi lệch một đơn vị (off-by-one)

Lỗi off-by-one xảy ra khi slicing cơ bản nhưng bạn lấy ít hoặc nhiều chỉ số hơn cần thiết trong list.

my_list = [1, 2, 3, 4, 5]

# Trying to get sublist from index 2 to 4, inclusive
sublist = my_list[2:5]  # Correct: my_list[2:5]
print(sublist)

# Incorrect usage:
sublist = my_list[2:4]  # Incorrect, excludes index 4
print(sublist)

# Expected output:
# [3, 4, 5]
# [3, 4]

Để tránh lỗi này, hãy hiểu trình tự đánh chỉ số trong Python và biết cần bao gồm hoặc loại trừ gì khi đánh chỉ số.

Lỗi với các gói sử dụng

Bạn cũng có thể gặp lỗi với các gói, đặc biệt khi phương pháp tách cần các mô-đun Python. Ví dụ gồm các gói numpy, re và itertools. Để tránh lỗi này, hãy đảm bảo các gói được nạp đúng và dùng phiên bản tương thích.

Xử lý các trường hợp biên

Trường hợp biên có thể xảy ra khi tách list trong Python nếu bạn không tính tới một số kịch bản. Ví dụ, đoạn mã dưới đây minh họa một hàm cố gắng tách list thành các phần 5 phần tử khi list chỉ có 4 phần tử.

import numpy as np

my_list = [1, 2, 3, 4]
chunks = np.array_split(my_list, 5)
print(chunks)

# Expected output: 
# [array([1]), array([2]), array([3]), array([4]), array([], dtype=int32)]

Để tránh lỗi này, hãy dùng câu lệnh điều kiện để xử lý trường hợp biên, như bên dưới.

import numpy as np

my_list = [1, 2, 3, 4]
if len(my_list) < 5:
    chunks = [my_list]
else:
    chunks = np.array_split(my_list, 5)
print(chunks)

# Expected output: [[1, 2, 3, 4]]

Xử lý ký tự đặc biệt

Không xử lý đúng ký tự đặc biệt cũng có thể gây lỗi khi tách list chuỗi trong Python. Các ký tự đặc biệt này bao gồm khoảng trắng, dấu phẩy hoặc ký tự chữ-số.

Ví dụ dưới đây cho thấy cách tránh lỗi bằng cách chỉ định ký tự dùng để tách chuỗi.

# Example list with special characters
my_list = ["apple, orange", "dog, mouse", "green, blue"]

# Splitting each string by the comma
split_list = [s.split(",") for s in my_list]
print(split_list)

# Expected output:
# [['apple', ' orange'], ['dog', ' mouse'], ['green', ' blue']]

Thực hành tốt và hướng dẫn

Vì tách list trong Python là thao tác phổ biến trong phân tích dữ liệu, nên việc tuân thủ một số thực hành để đảm bảo hiệu quả là quan trọng. Các khuyến nghị bao gồm:

  • Giữ tính bất biến khi có thể: Nếu list gốc không nên bị thay đổi, đảm bảo thao tác slicing của bạn không làm thay đổi list gốc. Slicing tạo list mới, nên thường không vấn đề, nhưng hãy lưu ý khi làm việc với cấu trúc dữ liệu phức tạp hơn.
  • Tối ưu hiệu năng: Khi xử lý các list lớn, lưu ý đến tác động hiệu năng. Slicing thường hiệu quả, nhưng việc sao chép list lớn không cần thiết có thể gây nút thắt hiệu năng.
  • Xử lý trường hợp biên: Xem xét các trường hợp như list rỗng, tách ở đầu hoặc cuối list, và chỉ số không hợp lệ. Đảm bảo mã của bạn xử lý trơn tru các kịch bản này.
  • Bổ sung xử lý lỗi và kiểm tra hợp lệ: Xử lý lỗi đặc biệt quan trọng khi bạn muốn tách một list thành nhiều list trong Python, để mã không bị vỡ và gây bất ngờ. 

Khoá học Python Programming của DataCamp cung cấp giải thích chi tiết về thực hành tốt để viết mã hiệu quả, xét tới các khái niệm phổ biến như xử lý lỗi và hiệu năng. 

Kỹ thuật tách list nâng cao

Bạn có thể đưa việc tách list lên mức nâng cao bằng cách sử dụng nhiều phương pháp mang lại nhiều kiểm soát và linh hoạt hơn. 

Tách list thành nhiều list

Bạn có thể tách list Python thành nhiều list bằng cách chỉ định các chỉ số tách cụ thể. Ví dụ, đoạn mã dưới tách list tại các chỉ số 2, 5, 7.

def split_at_indices(lst, indices):
    result = []
    prev_index = 0
    for index in indices:
        result.append(lst[prev_index:index])
        prev_index = index
    result.append(lst[prev_index:])
    return result

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
indices = [2, 5, 7]
split_lists = split_at_indices(my_list, indices)
print(split_lists)

# Expected output: [[1, 2], [3, 4, 5], [6, 7], [8, 9, 10]]

Tách list thành các phần bằng nhau

Bạn cũng có thể dùng thư viện dựng sẵn như ‘numpy’ để tách một list Python thành các phần bằng nhau dựa trên số phần mong muốn.

import numpy as np

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
num_parts = 3
split_lists = np.array_split(my_list, num_parts)
print([list(arr) for arr in split_lists])

# Expected output:
# [[np.int32(1), np.int32(2), np.int32(3), np.int32(4), np.int32(5)], [np.int32(6), np.int32(7), np.int32(8), np.int32(9), np.int32(10)], [np.int32(11), np.int32(12), np.int32(13), np.int32(14), np.int32(15)]]

Tách một list làm đôi

Bạn có thể dùng slicing để tách list Python làm đôi.

def split_in_half(lst):
    # Calculate the midpoint index of the list
    mid_index = len(lst) // 2
    # Return the two halves of the list
    return lst[:mid_index], lst[mid_index:]

# Example list
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Split the list into two halves
first_half, second_half = split_in_half(my_list)
print(first_half)
print(second_half)

# Expected output:
# [1, 2, 3, 4, 5]
# [6, 7, 8, 9, 10]

Với list có số phần tử lẻ, bạn có thể chỉ định chỉ số để đưa vào nửa đầu.

def split_in_half(lst):
    # Calculate the midpoint index of the list, including the middle element in the first half if the length is odd
    mid_index = (len(lst) + 1) // 2
    # Return the two halves of the list
    return lst[:mid_index], lst[mid_index:]

# Example list
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Split the list into two halves, handling odd-length
first_half, second_half = split_in_half(my_list)
print(first_half) 
print(second_half) 

# Expected output:
# [1, 2, 3, 4, 5]
# [6, 7, 8, 9]

Lộ trình Python Developer cũng cung cấp góc nhìn về cách viết mã nâng cao giúp bạn hiểu các kỹ thuật tách list nâng cao.

Kết luận

Có nhiều phương pháp để tách list trong Python. Mỗi phương pháp phụ thuộc vào loại list và ưu tiên của người dùng về hiệu quả. Là người làm dữ liệu, việc chọn phương pháp tách list phù hợp với phân tích của bạn là quan trọng.

Để hiểu sâu hơn về việc tách list trong Python, bạn có thể học thêm từ khoá học Python Fundamentals. Bạn cũng có thể học khoá Introduction to Python để nắm vững thao tác với list và các kiểu dữ liệu khác trong Python. Python Cheat Sheet for Beginners cũng rất hữu ích khi bạn muốn xem nhanh cách tách một list trong Python.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

Câu hỏi thường gặp

Khi nào tôi cần tách một list trong Python?

Tách list trong Python quan trọng đối với xử lý dữ liệu, đặc biệt khi quản lý tập dữ liệu lớn. Các phép biến đổi này hữu ích khi bạn tách dữ liệu để thực hiện phân tích, như huấn luyện và kiểm thử mô hình học máy.

Tôi nên làm gì nếu mô-đun itertools và numpy báo lỗi?

Đảm bảo bạn đã cài đặt các thư viện Python phù hợp. Nếu lỗi vẫn tiếp diễn, hãy cập nhật và sử dụng các phiên bản thư viện tương thích.

Sự khác nhau giữa tách list trong Python và partition() là gì?

Phương thức partition() trả về ba bộ (tuple) trong đó đối số điều kiện nằm ở giữa.

Tôi có thể tách một list Python với dấu phân tách hoặc giá trị cụ thể không?

Bạn cần chỉ định dấu phân tách hoặc giá trị để tách list.

Làm thế nào để cải thiện hiệu năng mã khi tôi tách một list thành nhiều list?

Hãy sử dụng hàm tái sử dụng khi tách một list thành nhiều list. Cách này đảm bảo hiệu quả.

Chủ đề
Python
Phân tích dữ liệu

Học Python với DataCamp

Khóa học

Giới thiệu về Functions trong Python

3 giờ
471.4K
Học cách viết các hàm của riêng bạn trong Python, cũng như các khái niệm quan trọng như phạm vi và xử lý lỗi.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm