List comprehension

T có 1 list comprehension như sau:

def unique_list(l_2d):
    kiemtra = []
    return [x for x in l_2d if x not in kiemtra and not kiemtra.append(x)]

List compre này với mục đích xoá phần tử trùng lắp trong một danh sách 2 chiều. T ko hiểu phần not kiemtra.append(x) có nghĩa là gì, hoạt động ra sao. Xin được mọi người giải đáp

Phân tích từng tí một đi

  • đọc doc thì hàm append nó trả về gì? về None, nó chẳng return gì hết.
  • not None thì là True, nghĩa là xét về điều kiện cái cụm and not kiemtra.append(x) luôn bằng True nên dùng nó ở đây với chức năng add thêm phần tử vào mảng kiemtra kia chứ không dùng để xét điều kiện.

Nói là hàm này xoá phần tử lặp thì không đúng lắm, nói trả về một danh sách không trùng thì đúng hơn, vì nó return nguyên cái array mới mà hì.
Mình nghĩ thế
Thêm 1 cái nữa tớ nhớ không nhầm Python là snake_case nên kiemtra nên đổi thành kiem_tra mới đúng chứ nhỉ?

5 Likes

From https://www.geeksforgeeks.org/python-ways-to-remove-duplicates-from-list/ :

def unique_list(l_2d):
  return [*set(l_2d)]   
def unique_list(l_2d):
  return list(set(l_2d))   
2 Likes

dúng set thì ko giữ dc thứ tự phần tử ý

Bạn có thể sửa lại một chút để dùng set(), làm tăng tốc độ xử lý
Giảm độ phức tạm từ O(n^2) còn O(n*logn)

def unique_list(l_2d):
    kiemtra = set()
    return [x for x in l_2d if x not in kiemtra and not kiemtra.add(x)]
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?