Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python - Loại bỏ cột chứa phần tử trùng lặp trong ma trận


Xác định các chỉ số cột (index) mà trong đó có phần tử trùng lặp (xuất hiện ở hàng trước đó), sau đó loại bỏ các cột đó khỏi tất cả các hàng. Sử dụng itertools.chain và generator.

Ví dụ

Minh họa:

from itertools import chain
def remove_dupes(my_sub):
    my_string = set()
    for i, elem in enumerate(my_sub):
        if elem not in my_string:
            my_string.add(elem)
        else:
            yield i

my_list = [[5, 1, 6, 7, 9], [6, 3, 1, 9, 1], [4, 2, 9, 8, 9], [5, 1, 6, 7, 3]]
print("Ma trận:", my_list)
K = 3
temp_idxs = set(chain.from_iterable(remove_dupes(sub) for sub in my_list))
my_result = [[elem for i, elem in enumerate(sub) if i not in temp_idxs] for sub in my_list]
print("Kết quả:", my_result)

Kết quả

Ma trận: [[5, 1, 6, 7, 9], [6, 3, 1, 9, 1], [4, 2, 9, 8, 9], [5, 1, 6, 7, 3]]
Kết quả: [[5, 1, 6, 7], [6, 3, 1, 9], [4, 2, 9, 8], [5, 1, 6, 7]]

Giải thích

  • Hàm remove_dupes duyệt qua một hàng (sub), dùng set theo dõi phần tử đã thấy. Nếu phần tử đã có trong set -> yield index (cột trùng lặp).
  • chain.from_iterable gom tất cả index trùng lặp từ tất cả hàng thành một set temp_idxs.
  • Tạo ma trận mới: chỉ giữ phần tử ở index KHÔNG nằm trong temp_idxs.