Ho una lista di 5 milioni di elementi di stringa, che sono memorizzati come un oggetto pickle.La lista python (set (a)) cambia ogni volta il suo ordine?
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']
per rimuovere i duplicati, io uso set(a)
, poi ho fatto una lista di nuovo attraverso list(set(a))
.
La mia domanda è:
Anche se ricomincio pitone, e leggere la lista dal file salamoia, sarà l'ordine del list(set(a))
essere lo stesso ogni volta?
Sono curioso di sapere come funziona questo hash -> list ordering.
Ho provato con un set di dati di piccole dimensioni e sembra avere un ordinamento coerente.
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']
c'è sicuramente un elemento casuale coinvolto nella procedura di hashing. –
Per i principianti, l'ordine dell'hash non è garantito, quindi l'ordine della lista non sarebbe garantito neanche. – Makoto
Immagino che tu possa usare [ordered-set] (https://pypi.python.org/pypi/ordered-set) invece di 'set' – MaxU