Bài đăng này sẽ thảo luận về cách xóa các bản sao khỏi danh sách trong Python trong khi vẫn giữ nguyên thứ tự ban đầu của các phần tử
Nếu thông tin đặt hàng không bắt buộc, bạn chỉ cần sử dụng một bộ không cho phép trùng lặp. Điều này loại bỏ các bản sao, nhưng thứ tự ban đầu của các phần tử không được duy trì vì các bộ là bộ sưu tập không có thứ tự
1
2
3
4
5
6
7
if __name__ == '__main__'.
ints = [4, 3, 5, 4, 2, 1, 3]
ints[. ] = danh sách[đặt[ints]]
in[int] # prints [1, 2, 3, 4, 5]
Tải xuống Chạy mã
Rõ ràng từ ví dụ trên, thứ tự ban đầu của các mục bị mất. Bài đăng này cung cấp tổng quan về một số lựa chọn thay thế có sẵn để duy trì thứ tự ban đầu của các mặt hàng
1. Sử dụng OrderedDict
Để giữ thông tin đặt hàng, bạn có thể sử dụng từ mô-đun collections
của Python. OrderedDict
là một lớp con dict ghi nhớ thứ tự chèn của các mục nhập của nó.
1
2
3
4
5
6
7
8
9
10
từ bộ sưu tập nhập OrderedDict
if __name__ == '__main__'.
ints = [4, 3, 5, 4, 2, 1, 3]
ints[. ] = danh sách[OrderedDict . .từ khóa[int]]
in[int] # prints [4, 3, 5, 2, 1]
Tải xuống Chạy mã
Ngoài ra, bạn có thể tận dụng lợi thế của thực tế là vị trí chèn ban đầu không thay đổi khi một mục nhập mới ghi đè mục nhập hiện có của một OrderedDict
. Đây là một ví dụ làm việc
1
2
3
4
5
6
7
8
9
từ bộ sưu tập nhập OrderedDict
if __name__ == '__main__'.
ints = [4, 3, 5, 4, 2, 1, 3]
ints[. ] = danh sách[OrderedDict . [[x, None] for x in ints].phím[]]
in[int] # prints [4, 3, 5, 2, 1]
Tải xuống Chạy mã
Lưu ý rằng bắt đầu từ Python 3. 7, bạn có thể sử dụng chính tả thông thường vì chúng được đảm bảo sẽ được đặt hàng
2. Sử dụng Thư viện more_itertools
Thư viện more-itertools
của Python cung cấp các quy trình tao nhã để làm việc với các lần lặp của Python. Nó có hàm unique_everseen
tạo ra các phần tử duy nhất trong khi vẫn giữ nguyên trật tự. Sau đây là một ví dụ đơn giản chứng minh việc sử dụng chức năng này
1
2
3
4
5
6
7
8
9
10
từ more_itertools nhập unique_everseen
if __name__ == '__main__'.
ints = [4, 3, 5, 4, 2, 1, 3]
ints[. ] = danh sách[unique_everseen[ints]]
in[int] # prints [4, 3, 5, 2, 1]
Tải xuống mã
3. Sử dụng danh sách hiểu
Một cách tiếp cận khác là xây dựng một “danh sách mới” từ danh sách ban đầu bằng cách sử dụng khả năng hiểu danh sách. Lưu ý cách tiếp cận này tương đối chậm hơn so với hai cách tiếp cận trên