Hallo,
ich möchte in einem File die Anzahl von unterschiedlichen
Substrings [0:3] bestimmen.
Gegeben:
100
110
110
110
099
099
200
200
Die Schleife und der Substring sind nicht das Problem, nur wie stelle
ich es an, dass nur "noch nicht gezählte" addiere ??
Ergebis hier wäre: 4 (100,110,099,200)
Thx a lot,
Lakeck
Zählen, wie viele verschiedene Strings vorkommen
Du kannst z.B. die Strings, die du schon gezählt hast in ein dict packen, also ungefähr so:
Alternativ könntest du die if-abfrage auch weglassen und nur für jede zeile bekannt[zeile] = True setzen und die Anzahl der verschiedenen Zeilen mit len(bekannt.keys()) bestimmen.
Code: Alles auswählen
bekannt = {}
versch_zeilen = 0
for zeile in datei:
if not zeile in bekannt:
versch_zeilen += 1
bekannt[zeile] = True
Wobei die verwendung von set etwas "artgerechter" wäre.henning hat geschrieben:Du kannst z.B. die Strings, die du schon gezählt hast in ein dict packen, also ungefähr so:.
joe
Stimmt, aber meiner einer hat bis dato noch nicht mit set gearbeitet, weils das noch nicht gab, als ich angefangen habe
Daher denke ich da gerne mal nicht dran.
In nem dict könnte man übrigens nebenbei gleich zählen, wie oft jede Zeile vorkommt...
Daher denke ich da gerne mal nicht dran.
In nem dict könnte man übrigens nebenbei gleich zählen, wie oft jede Zeile vorkommt...
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Warum nicht so?
Code: Alles auswählen
bekannt = []
versch_zeilen = 0
for zeile in datei:
if not zeile in bekannt:
versch_zeilen += 1
bekannt.append(zeile)
TUFKAB – the user formerly known as blackbird
Hi!
joe
Zwingend! Wenn nicht, gäbe es ja eigentlich keine daseinsberechtigung für hashtables. Wenn python mit in in einer liste sucht, muss ja nicht selten über die ganze liste iteriert werden. Wenn das tausende werte sind und sich kaum einer wiederholt, ist das schon problematisch. Beim dict wird nur die postition in der tabelle berechnet und das wars im prinzip.tabellar hat geschrieben:Soll heissen, dass das dict schneller ist?
joe
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Kann ich ja garnicht glauben, aber du hast recht:
Ausgabe:
Code: Alles auswählen
import time
loops=6000
test_list = []
test_dict = {}
for i in xrange(loops):
test_list.append(i)
test_dict[i] = True
print "Dict..."
start_time = time.time()
start_clock = time.clock()
found=0
for i in xrange(loops*2):
if i in test_dict:
found+=1
end_time = time.time()
end_clock = time.clock()
print "%.3f %.3f (%s)" % (end_time-start_time, end_clock-start_clock, found)
print "List..."
start_time = time.time()
start_clock = time.clock()
found=0
for i in xrange(loops*2):
if i in test_list:
found+=1
end_time = time.time()
end_clock = time.clock()
print "%.3f %.3f (%s)" % (end_time-start_time, end_clock-start_clock, found)
Code: Alles auswählen
Dict...
0.015 0.011 (6000)
List...
2.375 2.373 (6000)
@joe u. jens:
Danke für die Info's und den Test ! Bisher dachte ich immer, dass bei
Geschwindigkeitsdingen zuerst das Tupel, dann die Liste und dann das
Dictionary (Hash) kommt.
Vielleicht wäre das ja was für das Python wiki (blackbird?) ein neuer
Themenpunkt: "Python Performance [Tipps und Messungen]"
Tabellar
Danke für die Info's und den Test ! Bisher dachte ich immer, dass bei
Geschwindigkeitsdingen zuerst das Tupel, dann die Liste und dann das
Dictionary (Hash) kommt.
Vielleicht wäre das ja was für das Python wiki (blackbird?) ein neuer
Themenpunkt: "Python Performance [Tipps und Messungen]"
Tabellar