2016-07-13 8 views
0

Also ich führe ein Skript, das an eine Liste anfügt, Listen von Werten, aber in mehreren Fällen werde ich mit praktisch den gleichen Daten enden, es wird nur re sein Anders geartet, möchte ich dies überprüfen, indem ich meine angehängte Liste überprüfe, um zu sehen, ob meine neu geordnete Liste im Wesentlichen da ist. Zum Beispiel werde ich eine Liste wie diese haben:Wie kann ich erfolgreich eine Liste von Listen aussortieren?

sampleList = [ 
    [0,5,1,4,8,9], 
    [5, 4, 8, 9, 0, 1], 
    [1, 0, 4, 5, 8, 9], 
    [4, 8, 1, 0, 5, 9], 
    [7,6,2], 
] 

ich im Wesentlichen zu wollen, entfernen Sie entweder „Duplikate“ (die eine andere Reihenfolge der gleichen Elemente haben können) aus dieser Liste oder hängen Sie einfach die erste und nicht doppelte Ergebnisse und Graben der Rest mit einer Liste wie folgt enden:

culledList = [ 
    [0,5,1,4,8,9], 
    [7,6,2], 
] 
+1

ich da nicht bearbeiten können, für die Formatierung es erfordert wesentliche Änderungen (6 Zeichen). Können Sie die ursprüngliche Einrückung entfernen und zwei Zeilenumbrüche anstelle von Zeilenumbrüchen verwenden? –

+0

Welche Sprache benutzen Sie? Bitte fügen Sie das Tag für diese Sprache – svn

+0

die Reihenfolge des Elements in der Liste von Bedeutung? Die Liste kann mehrere Elemente desselben Elements enthalten. – Copperfield

Antwort

0

Wenn die Reihenfolge innerhalb der Listen sampleList ist Ihnen nicht egal, bevor alle Listen sortieren können sie mit dem .Sort() -Methode anhängen. Dies würde Duplikate aufdecken und eine Kontrollmöglichkeit bieten.

sampleList=[[1,2,3][4,5,6][7,8,9]] 
    l=[2,3,1] 
    if not(l.sort() in sampleList): sampleList.append(l.sort()) 

Dies würde nicht zu l sampleList hinzuzufügen, weil l.sort (die [1,2,3]) sampleList bereits ein identisches Element enthält.


EDIT

culledList=[] 
    sortedList=[] 
    for i in sampleList: 
     if not(i.sort() in sortedList): 
      sortedList.append(i.sort()) 
      culledList.append(i) 
+0

Was ist, wenn die Beispielliste das war? [[1,2,3,4], [2,1,3,4], [4,3,2,1], [7,6,2,1]]] Ich würde immer noch das Ende wollen Liste so aussehen; [[1,2,3,4], [7,6,2,1]] – Kenny

+0

Überprüfen Sie die neue bearbeitete Version meiner Antwort. – Domme

1

Wenn Sie mit verwirft Duplikate fein sind, können Sie tatsächlich Sätze erstellen, denn sie sind einfach:

sample_list = [ 
    [0,5,1,4,8,9], 
    [5, 4, 8, 9, 0, 1], 
    [1, 0, 4, 5, 8, 9], 
    [4, 8, 1, 0, 5, 9], 
    [7,6,2], 
] 

# This is a set comprehension. Unfortunately, 
# sets are not hashable, so we have to convert 
# to a `tuple`, which is. 
culled_data = {tuple(set(sublist)) for sublist in sample_list} 

# or as @Copperfield so helpfully pointed out, a frozenset 
culled_data = {frozenset(sublist) for sublist in sample_list} 

print(culled_data) 
print(list(culled_data)) 

# Here is a list comprehension to produce a list of 
# lists kind of like our original format. If that 
# is important, anyway. 
culled_list = [list(data) for data in culled_data] 
print(culled_list) 
+1

können Sie 'frozenset' stattdessen verwenden, ist ein hashable und unveränderlicher Satz – Copperfield