Jag har en lista (elementList) med olika objekt som har lite olika properties, bland annat ID och position (x,y). Jag vill loopa igenom denna lista och kolla varje element mot alla andra element, och köra en funktion (inRangeOf) och utifrån detta skapa en lista med kluster: alltså en lista över element som hör ihop. Sen vill jag självklart inte jämföra två element mer än en gång, så har "a" checkats mot "b" så ska inte "b" senare checka mot "a".
Det första försöket såg ut så här:
Jag kollade runt lite och insåg att det troligen är bättre att bara köra med itertools.combinations för att kolla alla element mot varandra. Exempel på användning utav itertools.combinations
[["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"]]
Jag har setat för länge med det här problemet nu att jag har börjat få mental härdsmälta. Det är säkert något uppenbart jag missar.
Det första försöket såg ut så här:
Kod:
Den koden funkar men är dock inte felfri: problem uppstår då jag raderar från listan elementList samtidigt som jag itererar över den - vilket fuckar indexordningen (ibland så blir det att jag "hoppar över" ett index, säg 2, och att index 2 då inte kollar mot alla andra värden.# Check all elements against all other elements in elementList, group together as clusters clusterList = [] for p in elementList: cluster = [] cluster.append(p) for o in elementList: if o == p: continue if p.inRangeOf(o, rangeValue): # rangeValue är ett rörligt tröskelvärde bara cluster.append(o) for v in cluster: elementList.remove(v) clusterList.append(cluster) # Check what clusters we have for item in clusterList: print item
Jag kollade runt lite och insåg att det troligen är bättre att bara köra med itertools.combinations för att kolla alla element mot varandra. Exempel på användning utav itertools.combinations
Kod:
Problemet här är att jag inte vet hur jag ska skapa en lista över klustren. Säg att följande element är nära varandra: a och b, c och d, e och f, g och h - då vill jag att min lista (clusterList) i slutändan innehåller listor i stil med:import itertools myList = ["a", "b", "c", "d", "e", "f", "g", "h"] for x,y in itertools.combinations(myList, 2): print x,y
[["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"]]
Jag har setat för länge med det här problemet nu att jag har börjat få mental härdsmälta. Det är säkert något uppenbart jag missar.
__________________
Senast redigerad av Spader 2016-06-11 kl. 19:25.
Senast redigerad av Spader 2016-06-11 kl. 19:25.