Seite 1 von 1

Doppelte Listeneinträge -> Zählen und reduzieren

Verfasst: Freitag 4. April 2008, 18:33
von acidk
Hi!

Ich habe eine Liste aus Listen mit doppelten Einträgen, die ich zum einen Zählen, zum anderen auf nicht redundantes reduzieren möchte.
Die Anzahl der doppelten Eintraege will ich hinten anhaengen.

Code: Alles auswählen

list_2_write_matched_points=
[[-1.391, 32.32, 28.800000000000001, 12.42],
[-1.391, 32.32, 28.800000000000001, 12.42],
[-1.391, 32.32, 28.800000000000001, 12.42],
[-1.391, 32.32, 28.800000000000001, 12.42],
[-0.031, 41.32, 30.300000000000001, 13.92],
[-0.031, 41.32, 30.300000000000001, 13.92]]


for i in list_2_write_matched_points:			
	counter =0 
		
	for j in list_2_write_matched_points:
		if i ==j:
			counter +=1			
	
	i.append(counter)
			
			
for k in list_2_write_matched_points:
	 if(k[0:5]) not in reduced_list:
		reduced_list.append(k[0:5])
					 		
for element in reduced_list:
	print element			

Leider wird Counter um die vorh. Anzahl d. doppelten Einträge mehrfach angehängt --- ich finde die Lösung auch nicht gerade elegant.

Wäre Klasse, wenn jemand eine performantere Lösung parat hätte.

Danke!

Verfasst: Freitag 4. April 2008, 18:55
von BlackJack
Ist ein Fall für `itertools.groupby()`:

Code: Alles auswählen

from itertools import groupby
from pprint import pprint


def ilen(iterable):
    return sum(1 for dummy in iterable)


def main():
    list_2_write_matched_points = [[-1.391, 32.32, 28.800000000000001, 12.42],
                                   [-1.391, 32.32, 28.800000000000001, 12.42],
                                   [-1.391, 32.32, 28.800000000000001, 12.42],
                                   [-1.391, 32.32, 28.800000000000001, 12.42],
                                   [-0.031, 41.32, 30.300000000000001, 13.92],
                                   [-0.031, 41.32, 30.300000000000001, 13.92]]

    reduced = [key + [ilen(items)]
               for key, items in groupby(list_2_write_matched_points)]
    
    pprint(reduced)

Verfasst: Samstag 5. April 2008, 13:59
von acidk
Starke Sache!
Vielen Dank für die schnelle Hilfe!

Verfasst: Samstag 5. April 2008, 14:01
von Y0Gi
Zum reinen Entfernen von Duplikaten aus einer Liste wird diese gerne mittels `list(set(foo))` übergangsweise in ein Set (eine Menge, und Mengen enthalten keine Duplikate) umgewandelt.