Seite 1 von 1

liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 12:57
von Windsurfer
Hallo zusammen,
vielleicht ist meine Frage recht simpel - ich finde aber keine Lösung :K

Ich habe eine Liste mit ca. 4000 Zahlen (zw. 1 und 22). Nun möchte ich die Anzahl der vorhandenen Zahlen einzeln ermitteln. z.B. 45x die 1, 533x die 2 usw.
Außerdem brauche ich noch die Position der einsen, zweien usw. in der Liste.

Wie könnte ich sowas anstellen?
Viele Dank für eure Hilfe!

Re: liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 13:12
von b.esser-wisser
Das zählen geht z.B. mit collections.defaultdict():

Code: Alles auswählen

import collections

def count(numbers, counters=None):
    if counters is None:
        counters = collections.defaultdict(int)
    for number in numbers:
        counters[number] += 1
    return counters
Für alles andere poste mal mehr Details, Beispielcode etc.

hth, Jörg
Edit: Ergänzungen wegen edit des OP

Re: liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 13:38
von cofi
Wenn du die Positionen brauchst, kannst du auch ein `defaultdict(list)` nehmen und statt hochzaehlen die aktuelle Position in die Liste der Nummer eintragen, allerdings muss man dafuer ueber die Laenge der Nummernliste iterieren.

Re: liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 13:42
von Windsurfer
Hi Jörg,
vielen Dank, das klappt schon mal!

Jetzt muss ich mal sehen wie ich weiter mache. Ziel der Sache ist es, aus einer Shape Datei, welche verschiedene Croptypes (in einer bestimmten Anzahl) enthält, diese auszulesen und von jedem Croptype z.B. 50% zu verwenden, und diese per random rauszupicken und damit eine neue Shape Datei zu erstellen (ogr2ogr).

bis dann :)

Re: liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 13:46
von Windsurfer
@ cofi
Die Idee hört sich nicht schlecht an, nur weiß ich nicht, wie ich das programmieren soll.
Und wie würdest du die Position abspeichern?
Ich arbeite erst seit ein paar Wochen mit Python, daher entschuldige meine Naive nachfrage..

lg

Re: liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 14:49
von sma
So?

Code: Alles auswählen

import random

def setup():
    numbers = []
    for i in range(4000):
        numbers.append(random.randint(1, 11) + random.randint(1, 11))
    return numbers

def invert(numbers):
    indexes = [[] for n in range(max(numbers))]
    for i, n in enumerate(numbers):
        indexes[n - 1].append(i)
    return indexes

indexes = invert(setup())
print("Counts:")
for i, n in enumerate(indexes):
    print("%d: %s" % (i + 1, len(n)))
print()
print("Indices:")
for i, n in enumerate(indexes):
    print("%d: %s" % (i + 1, n))
Stefan

Re: liste auslesen nach Kriterien

Verfasst: Montag 7. Juni 2010, 17:05
von cofi
Ahh wie konnte ich nur `enumerate` vergessen :(

Code: Alles auswählen

from collections import defaultdict

def count(numbers, counters=None):
    if counters is None:
        counters = defaultdict(list)
    for i, number in enumerate(numbers):
        counters[number].append(i)
    return counters

Re: liste auslesen nach Kriterien

Verfasst: Dienstag 8. Juni 2010, 10:16
von Windsurfer
Nicht schlecht was es alles für schicke Funktionen gibt!
Wenns jemanden interessiert, kann ich nachher mal meine fertige Lösung posten.

Danke erst einmal für die super Tipps! :)