Bài viết demo việc dùng list comprehension (thường nhầm lẫn là lambda) để tách số âm và số dương từ một mảng, sau đó gộp lại với số âm ở trước, số dương ở sau.
Ví dụ
def rearrange(arr):
# List comprehension lọc số âm
arr_neg = [x for x in arr if x < 0]
# List comprehension lọc số dương và 0
arr_pos = [x for x in arr if x >= 0]
# Gộp: âm trước, dương sau
return arr_neg + arr_pos
# Chương trình chính
if __name__ == "__main__":
arr = [19, -56, 3, -1, -45, -23, 45, 89, 90]
print(rearrange(arr))
Kết quả
[-56, -1, -45, -23, 19, 3, 45, 89, 90]
Giải thích & Sửa lỗi thuật ngữ
- Code trên dùng list comprehension, không phải lambda. Lambda là hàm ẩn danh:
lambda x: x < 0. - Nếu muốn dùng
filter()+ lambda:
arr_neg = list(filter(lambda x: x < 0, arr)) arr_pos = list(filter(lambda x: x >= 0, arr))
Cách viết gọn (một dòng)
rearrange = lambda arr: [x for x in arr if x < 0] + [x for x in arr if x >= 0]
Kết luận
Đã trình bày cách phân tách và sắp xếp lại số âm/dương. Lưu ý phân biệt rõ lambda (hàm ẩn danh) và list comprehension (cú pháp tạo list).