2016-05-04 9 views
6

Tôi có danh sách 5 triệu phần tử chuỗi, được lưu trữ dưới dạng đối tượng dưa.Danh sách python (set (a)) có thay đổi thứ tự của nó không?

a = ['https://en.wikipedia.org/wiki/Data_structure','https://en.wikipedia.org/wiki/Data_mining','https://en.wikipedia.org/wiki/Statistical_learning_theory','https://en.wikipedia.org/wiki/Machine_learning','https://en.wikipedia.org/wiki/Computer_science','https://en.wikipedia.org/wiki/Information_theory','https://en.wikipedia.org/wiki/Statistics','https://en.wikipedia.org/wiki/Mathematics','https://en.wikipedia.org/wiki/Signal_processing','https://en.wikipedia.org/wiki/Sorting_algorithm','https://en.wikipedia.org/wiki/Data_structure','https://en.wikipedia.org/wiki/Quicksort','https://en.wikipedia.org/wiki/Merge_sort','https://en.wikipedia.org/wiki/Heapsort','https://en.wikipedia.org/wiki/Insertion_sort','https://en.wikipedia.org/wiki/Introsort','https://en.wikipedia.org/wiki/Selection_sort','https://en.wikipedia.org/wiki/Timsort','https://en.wikipedia.org/wiki/Cubesort','https://en.wikipedia.org/wiki/Shellsort'] 

Để loại bỏ bản sao, tôi sử dụng set(a), sau đó tôi đã làm cho nó một danh sách một lần nữa thông qua list(set(a)).

Câu hỏi của tôi là:

Ngay cả khi tôi khởi động lại python, và đọc danh sách từ file dưa, sẽ theo thứ tự của list(set(a)) giống nhau mỗi lần?

Tôi mong muốn biết cách hoạt động của danh sách băm -> này.


Tôi đã thử nghiệm với một tập dữ liệu nhỏ và dường như có thứ tự nhất quán.

In [50]: a = ['x','y','z','k'] 

In [51]: a 
['x', 'y', 'z', 'k'] 

In [52]: list(set(a)) 
['y', 'x', 'k', 'z'] 

In [53]: b=list(set(a)) 

In [54]: list(set(b)) 
['y', 'x', 'k', 'z'] 

In [55]: del b 

In [56]: b=list(set(a)) 

In [57]: b 
['y', 'x', 'k', 'z'] 
+0

có chắc chắn là một yếu tố ngẫu nhiên tham gia vào quá trình băm. –

+0

Để bắt đầu, thứ tự của băm không được bảo đảm, do đó thứ tự của danh sách sẽ không được đảm bảo. – Makoto

+0

Tôi đoán bạn có thể sử dụng [order-set] (https://pypi.python.org/pypi/ordered-set) thay vì 'set' – MaxU

Trả lời

2

tôi sẽ đề nghị một phụ set() để đảm bảo tính duy nhất khi thêm các mục trong danh sách, do đó giữ gìn trật tự của list() của bạn, và không lưu trữ các set() cho mỗi gia nhập.

Trước tiên, hãy tải danh sách của bạn và tạo một tập hợp với nội dung Trước khi thêm các mục vào danh sách của bạn, hãy kiểm tra xem chúng không có trong bộ (tìm kiếm nhanh hơn bằng cách sử dụng "trong" từ bộ này chứ không phải danh sách, đặc biệt nếu có rất nhiều yếu tố) Pickle danh sách của bạn, thứ tự sẽ được chính xác mà bạn muốn

Nhược điểm: mất gấp đôi bộ nhớ hơn so với xử lý chỉ là một set()

Các vấn đề liên quan