Mam listę 5 milionów elementów ciąg, które są przechowywane jako obiekt pikle.Czy lista pythonów (zestaw (a)) zmienia za każdym razem jej kolejność?
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']
Aby usunąć duplikaty, używam set(a)
, potem zrobiłem to lista ponownie przez list(set(a))
.
Moje pytanie brzmi:
Nawet gdybym ponownie uruchomić Pythona i odczytać listy z pliku marynowane, będzie kolejność list(set(a))
być taka sama za każdym razem?
Chciałbym wiedzieć, jak działa ten hash -> zamawianie list.
Testowałem z małym zestawem danych i wydaje się, że ma on spójne zamówienie.
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']
jest to z pewnością element losowy udział w procedurze mieszający. –
Po pierwsze, kolejność haszu nie jest gwarantowana, więc kolejność na liście nie będzie gwarantowana. – Makoto
Domyślam się, że możesz użyć [uporządkowanego zestawu] (https://pypi.python.org/pypi/ordered-set) zamiast "set" – MaxU