2016-05-04 4 views
6

Ich habe eine Liste von 5 Millionen String-Elementen, die als Pickle-Objekt gespeichert sind.Ändert die Python-Liste (set (a)) jedes Mal ihre Reihenfolge?

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'] 

Duplikate zu entfernen, ich set(a) verwenden, dann habe ich es eine Liste wieder durch list(set(a)).

Meine Frage ist:

Auch wenn ich Python neu zu starten, und die Liste aus der Beize Datei lesen, wird die Reihenfolge der list(set(a)) jedes Mal gleich sein?

Ich bin gespannt, wie diese Hash -> Liste Bestellung funktioniert.


Ich habe mit einem kleinen Datensatz getestet und es scheint eine konsistente Reihenfolge zu haben.

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

Es auf jeden Fall in der Hashing-Verfahren beteiligt ein Zufallselement ist. –

+0

Für den Anfang ist die Reihenfolge der Hash nicht garantiert, so dass die Reihenfolge der Liste auch nicht garantiert werden würde. – Makoto

+0

Ich denke, Sie können [geordneten-set] (https://pypi.python.org/pypi/ordered-set) anstelle von 'set' verwenden – MaxU

Antwort

2

Ich würde eine Hilfs set() vorschlagen unicity zu gewährleisten, wenn Punkte auf der Liste hinzugefügt, so dass die Reihenfolge der list() und nicht die set() per se Lagerung zu erhalten.

Zuerst laden Sie Ihre Liste und erstellen Sie ein Set mit dem Inhalt Bevor Sie Elemente zu Ihrer Liste hinzufügen, überprüfen Sie, dass sie nicht im Set sind (viel schneller Suche mit "in" aus dem Set und nicht die Liste, besonders wenn Es gibt viele Elemente) Pickle Ihrer Liste, wird die Reihenfolge genau diejenige, die Sie

Drawback wollen: doppelt so viel Speicher braucht als Umgang mit nur einem set()