Tìm hiểu làm thế nào để loại bỏ các bản sao khỏi danh sách trong Python. Show
Thí dụXóa bất kỳ bản sao nào khỏi danh sách: mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist) Hãy tự mình thử » Ví dụ giải thíchĐầu tiên chúng tôi có một danh sách có chứa các bản sao: Một danh sách với các bản saomylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist) Tạo một từ điển, sử dụng các mục danh sách làm khóa. Điều này sẽ tự động xóa bất kỳ bản sao nào vì từ điển không thể có các khóa trùng lặp. Tạo một từ điển mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist) Hãy tự mình thử » Ví dụ giải thíchĐầu tiên chúng tôi có một danh sách có chứa các bản sao: Một danh sách với các bản sao mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist) Tạo một từ điển, sử dụng các mục danh sách làm khóa. Điều này sẽ tự động xóa bất kỳ bản sao nào vì từ điển không thể có các khóa trùng lặp.Tạo một từ điển Sau đó, chuyển đổi từ điển trở lại thành một danh sách:Chuyển đổi thành một danh sách Thí dụ mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist) Bây giờ chúng tôi có một danh sách mà không có bất kỳ bản sao nào, và nó có cùng thứ tự như danh sách ban đầu. In danh sách để chứng minh kết quả Hãy tự mình thử » Ví dụ giải thíchĐầu tiên chúng tôi có một danh sách có chứa các bản sao: Sau đó, chuyển đổi từ điển trở lại thành một danh sách:Chuyển đổi thành một danh sách Bây giờ chúng tôi có một danh sách mà không có bất kỳ bản sao nào, và nó có cùng thứ tự như danh sách ban đầu. In danh sách để chứng minh kết quả In danh sách Tạo một từ điểnChuyển đổi thành một danh sách Bây giờ chúng tôi có một danh sách mà không có bất kỳ bản sao nào, và nó có cùng thứ tự như danh sách ban đầu. In danh sách để chứng minh kết quả In danh sách Ví dụ giải thíchChuyển đổi thành một danh sách Bây giờ chúng tôi có một danh sách mà không có bất kỳ bản sao nào, và nó có cùng thứ tự như danh sách ban đầu. In danh sách để chứng minh kết quả In danh sách mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist)Chuyển đổi thành một danh sách Bây giờ chúng tôi có một danh sách mà không có bất kỳ bản sao nào, và nó có cùng thứ tự như danh sách ban đầu. In danh sách để chứng minh kết quả In danh sách mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist)Tạo một chức năng Nếu bạn muốn có một chức năng nơi bạn có thể gửi danh sách của mình và lấy lại chúng mà không cần sao chép, bạn có thể tạo một chức năng và chèn mã từ ví dụ trên. def my_function (x): & nbsp; Danh sách trả lại (Dict.FromKeys (x))Chuyển đổi thành một danh sách mylist = ["a", "b", "a", "c", "c"] mylist = list (dict.fromKeys (mylist)) in (mylist) print(mylist)Nếu sử dụng gói bên thứ ba sẽ ổn thì bạn có thể sử dụng
Nó bảo tồn thứ tự của Danh sách ban đầu và UT cũng có thể xử lý các mục không thể không có được như từ điển bằng cách rơi trở lại trên thuật toán chậm hơn ( 0). Trong trường hợp cả hai khóa và giá trị đều có thể băm, bạn có thể sử dụng đối số 1 của hàm đó để tạo các mục có thể băm cho "thử nghiệm tính duy nhất" (để nó hoạt động trong ____10).Trong trường hợp từ điển (so sánh độc lập với thứ tự), bạn cần ánh xạ nó cho một cấu trúc dữ liệu khác so sánh như thế, ví dụ 3:
Lưu ý rằng bạn không nên sử dụng cách tiếp cận 4 đơn giản (không sắp xếp) vì từ điển bằng nhau không nhất thiết phải có cùng thứ tự (ngay cả trong Python 3.7 trong đó thứ tự chèn - không phải thứ tự tuyệt đối - được đảm bảo):insertion order - not absolute order - is guaranteed):
Và thậm chí sắp xếp bộ tuple có thể không hoạt động nếu các phím không thể sắp xếp:
Điểm chuẩnTôi nghĩ rằng có thể hữu ích khi xem hiệu suất của các phương pháp này so sánh như thế nào, vì vậy tôi đã thực hiện một điểm chuẩn nhỏ. Các biểu đồ điểm chuẩn là thời gian so với kích thước danh sách dựa trên danh sách không có bản sao (được chọn tùy ý, thời gian chạy không thay đổi đáng kể nếu tôi thêm một số hoặc nhiều bản sao). Đó là một cốt truyện log-log nên phạm vi hoàn chỉnh được bao phủ. Thời gian tuyệt đối: Thời gian liên quan đến cách tiếp cận nhanh nhất: Cách tiếp cận thứ hai từ Thefourtheye là nhanh nhất ở đây. Cách tiếp cận 5 với hàm 1 là ở vị trí thứ hai, tuy nhiên đó là cách tiếp cận nhanh nhất bảo tồn trật tự. Các cách tiếp cận khác từ Jcollado và Thefourtheye gần như nhanh chóng. Cách tiếp cận sử dụng 5 mà không có chìa khóa và các giải pháp từ Emmanuel và Scorpil rất chậm đối với danh sách dài hơn và hoạt động tồi tệ hơn nhiều 8 thay vì 0. Cách tiếp cận của STPK với 0 không phải là 8 nhưng nó chậm hơn nhiều so với các phương pháp tương tự ____10.Mã để tái tạo điểm chuẩn:
Đối với tính đầy đủ ở đây là thời gian cho một danh sách chỉ chứa các bản sao:
Thời gian không thay đổi đáng kể ngoại trừ 5 mà không có chức năng 1, trong trường hợp này là giải pháp nhanh nhất. Tuy nhiên, đó chỉ là trường hợp tốt nhất (vì vậy không phải là đại diện) cho chức năng đó với các giá trị không thể đo được vì thời gian chạy phụ thuộc vào số lượng giá trị duy nhất trong danh sách: O(n*m) trong trường hợp này chỉ là 1 và do đó nó chạy trong ____10.Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của 7.
|