2016-11-28 7 views
0

Wenn ich eine verschachtelte Liste haben wie:Einzigartige Elemente in Listen der Liste

l = [['AB','BCD','TGH'], ['UTY','AB','WEQ'],['XZY','LIY']] 

In diesem Beispiel ‚AB‘ ist auf die ersten beiden verschachtelten Listen gemeinsam. Wie kann ich "AB" in beiden Listen entfernen, während die anderen Elemente beibehalten werden? Wie kann ich im Allgemeinen ein Element aus jeder verschachtelten Liste entfernen, das in zwei oder mehr verschachtelten Listen vorkommt, so dass jede verschachtelte Liste eindeutig ist?

l = [['BCD','TGH'],['UTY','WEQ'],['XZY','LIY']] 

Ist es möglich, dies mit einer for-Schleife zu tun?

Dank

Antwort

0
from collections import Counter 
from itertools import chain 

counts = Counter(chain(*ls)) # find counts 
result = [[e for e in l if counts[e] == 1] for l in ls] # take uniqs 
0

Eine Möglichkeit ist, um so etwas zu tun:

from collections import Counter 
counts = Counter([b for a in l for b in a]) 
for a in l: 
    for b in a: 
     if counts[b] > 1: 
      a.remove(b) 

Edit: Wenn Sie die (schrecklich nützliche Standardbibliothek) collections Modul (siehe den Kommentar) vermeiden wollen , können Sie counts oben durch den folgenden benutzerdefinierten Zähler ersetzen:

+0

Gibt es einen Weg, der keine Importe beinhaltet? –

+0

Ich bin mir nicht sicher, warum Sie jemals würden; 'Collections' ist in der Standardbibliothek und Sie werden es wahrscheinlich in Ihrer Toolbox haben wollen. Auf jeden Fall habe ich die Antwort mit einer Alternative aktualisiert. – fuglede

+0

Ich bin nur ein Anfänger, ich habe keine Importmodule gelernt –

0

Eine etwas kurze Lösung ohne Importe zunächst eine reduce d Version der ursprünglichen Liste zu erstellen wäre, dann durch die ursprüngliche Liste iterieren und entfernen Sie Elemente mit Zählungen größer als 1:

lst = lst = [['AB','BCD','TGH'], ['UTY','AB','WEQ'],['XZY','LIY']] 

reduced_lst = [y for x in lst for y in x] 

output_lst = [] 

for chunk in lst: 
    chunk_copy = chunk[:] 
    for elm in chunk: 
     if reduced_lst.count(elm)>1: 
      chunk_copy.remove(elm) 
    output_lst.append(chunk_copy) 


print(output_lst) 

drucken Soll:

[['BCD', 'TGH'], ['UTY', 'WEQ'], ['XZY', 'LIY']] 

Ich hoffe, das erweist sich als nützlich.

Verwandte Themen