Seite 1 von 1

Strings schnell Verknuepfen

Verfasst: Freitag 11. Dezember 2009, 12:05
von Gabelmensch
Tag,

ich will die 17. Spalte einer Liste zu einen langen String verknuepfen. Ich habe drei Methoden mit je 5000, 10000 und 25000 Zeilen ausprobiert, und die Zeiten in drei Diagramme geplottet:

Code: Alles auswählen

teiler = 1000


#### methode 1 start
s = ""
s2 = ""
c = 0
ctime = time.time()
t1 = [[0, 0]]
for i in liste:
	s = ''.join((s, str(i[17])))
	c = c + 1
	print c
	if (c % teiler) == 0:
		s2 = ' '.join((s2, s))
		s = ""
#		c = 0
		t1.append([str(time.time() - ctime), str(c)])
print t1
#### methode 1 stopp





#### methode 2 start
s = ""
c = 0
ctime = time.time()
t2 = [[0, 0]]
for i in liste:
	s = ''.join((s, str(i[17])))
	c = c + 1
	print c
	if (c % teiler) == 0:
		t2.append([str(time.time() - ctime), str(c)])
print t2
#### methode 2 stopp







#### methode 3 start
s = ""
c = 0
ctime = time.time()
t3 = [[0, 0]]
for i in liste:
	s = s + ' ' + str(i[17])
	c = c + 1
	print c
	if (c % teiler) == 0:
		t3.append([str(time.time() - ctime), str(c)])
print t3
#### methode 3 stopp






#### Daten in Textdateien um mit gnuplot zu plotten
vergleich = ""
for t, d in (t1, '1'), (t2, '2'), (t3, '3'):

	outfile = open('vergleich.stat' + d, 'w')

	for r in t:

		t = str(r[0])
		l = str(r[1])
		zeile = ' '.join((t, l, '\n'))
		outfile.write(zeile)

outfile.close()
Bild Bild Bild

Was gibt es sonst noch fuer schnellere Methoden?

Verfasst: Freitag 11. Dezember 2009, 12:23
von lunar
Bei einer Liste von Listen dürfte Folgendes so ziemlich die beste Methode zum Verknüpfen der 17. Spalte sein:

Code: Alles auswählen

' '.join(str(l[17]) for l in lists)

Verfasst: Freitag 11. Dezember 2009, 12:29
von Zap
Ich hatte an sowas gedacht (was allerdings fehlt ist das str() )

Code: Alles auswählen

In [24]: import string

In [25]: import operator

In [26]: data = [list(string.ascii_letters) for _ in range(1000)]

In [27]: "".join(imap(operator.itemgetter(17), data))

Verfasst: Freitag 11. Dezember 2009, 14:03
von Gabelmensch
Vielen Dank euch zwei. Beide Methoden sind sehr fix, die von Zap ist die schnellere. Allerdings musste ich "imap" durch "map" ersetzen, ist das korrekt oder fehlt mir etwas?

Verfasst: Freitag 11. Dezember 2009, 14:16
von HWK
itertools.imap
MfG
HWK