Hallo zusammen,
ich bin irgendwie nicht zufrieden...
Ich würde gerne aus einer Liste:
z.b.
1,2,3,5,7,8,9,11
einen String generieren, wobei fortlaufende Reihen zusammengefasst werden.
-> "1-3,5,7-9,11"
hier mein kläglicher Vesuch...
irgendwie habe ich das Gefühl: Das muss einfacher gehen ?
Vielleicht hat ja jemand Lust auf diese kleine morgendliche
Denksportaufgabe...
Vielen Dank
Grüße Frank
#!/usr/local/bin/python
l=[3,5,6,7,8,9,10,11,12,22,23,24,25,26,32,34,36,38,39,40,41,44,45,47]
l.sort()
r=""
mylist=[]
for c in xrange(len(l)-1):
mylist.append(l[c])
if l[c]+1 == l[c+1]:continue
if len(mylist)==1:r=r+str(mylist[0])+ ","
else:r=r + str(mylist[0]) +"-" + str(mylist[len(mylist)-1])+","
mylist=[]
mylist.append(l[len(l)-1])
if len(mylist)==1:r=r+str(mylist[0])+ ","
else:r=r + str(mylist[0]) +"-" + str(mylist[len(mylist)-1])+","
print r
--
+++ Jetzt WLAN-Router für alle DSL-Einsteiger und Wechsler +++
GMX DSL-Powertarife zudem 3 Monate gratis* http://www.gmx.net/dsl
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
Hallo Leute!
Wieder mal ne 'Denksportaufgabe':
Auf dem derzeit stattfindenden Linuxtag,
den ich 2 Tage lang besucht habe, wurde ich
in einen Programmierwettbewerb am hp-Stand
verwickelt.
Die gestellte Aufgabe war leider etwas
- gelinde gesagt - sonderbar:
Schreibe ein Programm in einer beliebigen
Progammiersprache, das eine als
Argument beigesteuerte Ziffernfolge
als 7-Segmentdarstellung ausgibt, mit
*möglichst kurzem Quellcode* (!)
Randbedingung: Zeilenlänge <= 132.
Die Eingabe 0123456789 erzeugt z.B.:
- - - - - - - -
| | | | || || | || || |
- - - - - - -
| | || | | || | || | |
- - - - - - -
Wie es das folgende 171 Byte lange
Python-Programm tut (Meine dortige
Lösung war sogar etwas länger):
import sys
for i in range(5):
r=""
for c in sys.argv[1]:
n=3*int("14041030301312113131041301213112141130301414114131"[5*int(c)+i]);r+="
- | || |"[n:n+3]
print r
Natürlich gab es kürzere (in anderen Sprachen).
(Versungen und vertan!)
Wie kann man es in Python besser machen?
Gregor
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
5
6
Bruchzahlen
by "Sebastian \"Marduk\" Pölsterl"
29 Jun '04
29 Jun '04
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo!
Ich bin gerade auf eine recht sonderbare eigenart gestoßen.
<code>
zahl = 5/32
zahl2 = float(5/32)
zahl3 = 6/3
print zahl
print zahl2
print zahl3
</code>
Ersteres gibt '0' zurück, zweiteres '0.0', und da dritte wie erwartet '2'
Jetzt versteh ich überhaupt nicht, wieso die ersten beiden Zahlen 0 ergeben.
Hab ich da irgendwas übersehen, oder was ist hier los?
Gruß,
Sebastian Pölsterl
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFA4FmL1ygZeJ3lLIcRAqrpAJ4hluXAcQ3/nMev0LDZBrkTnAFwEgCcCwo3
PZA3pvHwilEtBUeuVCKO/ho=
=2Mlr
-----END PGP SIGNATURE-----
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
Hi wujutin,
verwende statt der liste doch ein Set
from sets import Set
mySet = Set([3, 5, 7, 8, 8, 9, 10, 10])
print mySet
Gruß
Fritz
Am Sat, 26 Jun 2004 20:50:51 +0200
Schrieb "wujutin" <wujutin(a)gmx.de>:
> Hallo,
>
>
>
> ich habe eine sortierte Liste, z.B.
>
>
>
> [3, 5, 7, 8, 8, 9, 10, 10]
>
>
>
> Weiß jemand eine elegante Möglichkeit, mit der ich die Wiederholungen
> wegfiltern kann,
>
> ohne dass ich eine temporäre Liste verwenden muss?
>
>
>
> [3, 5, 7, 8, 9, 10]
>
>
>
> Vielen Dank.
>
>
>
> Gruß
>
> wujutin
>
>
>
>
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
wujutin wrote:
> ich habe eine sortierte Liste, z.B.
>
> [3, 5, 7, 8, 8, 9, 10, 10]
>
> Weiß jemand eine elegante Möglichkeit, mit der ich die Wiederholungen
> wegfiltern kann,
> ohne dass ich eine temporäre Liste verwenden muss?
>>> def unique(seq):
... it = iter(seq)
... last = it.next()
... yield last
... for item in it:
... if item != last:
... yield item
... last = item
...
>>> lst = [3,5,7,8,8,9,10,10]
>>> lst[:] = unique(lst)
>>> lst
[3, 5, 7, 8, 9, 10]
>>>
Ich bin mir allerdings nicht sicher, ob die Implementierung nicht doch eine
temporäre Liste verwendet.
Peter
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
Hallo,
ich habe eine sortierte Liste, z.B.
[3, 5, 7, 8, 8, 9, 10, 10]
Weiß jemand eine elegante Möglichkeit, mit der ich die Wiederholungen
wegfiltern kann,
ohne dass ich eine temporäre Liste verwenden muss?
[3, 5, 7, 8, 9, 10]
Vielen Dank.
Gruß
wujutin
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
Wenn ich ein bisserl rumoptimiere (inkl. eurer Tricks), komme ich letzthin
auf etwas von der Logik her ahnliches wie peter2, nur halt ohne Generatoren;
und wenn es wirklich ein problem ist, kann man ja 'ne pyd benutzen: siehe
Anhang. Meine Ergebnisse:
Anzahl Listenelemente: 500000
Anzahl Loops: 20
Laufzeit pro Loop im Schnitt:
boesi : 1.0696 sec (Alexander Bosecke)
Peter : 1.4595 sec (Peter Otten - sauber)
Peter2 : 1.2858 sec (Peter Otten - schnell)
Gerson : 0.9656 sec (Gerson Kurz - schnell und leserlich)
Gerson_pyd: 0.4391 sec (Gerson Kurz - Warum nicht gleich in
Inline-Assembler ???)
Bei meiner Losung ware noch eine Optimierung drin: inplace, dann spart man
sich den alloc am Anfang => Qualliste ist hin. Die pyd-Losung ist naturlich
absolut fehlerinsensitiv (z.b. durfte sie bei 0 elementen absturzen - nicht
getestet schaut aber so aus).
> @Gerson: es ist nicht grad die feine Art, einbuchstabige Variablennamen
> zu verwenden.
OK, ich habe das korrigiert!!!
def Gerson(oo):
"""Gerson Kurz - schnell und leserlich"""
oO = [None] * len(oo)
if oo:
Oo = oo[0]
o0 = Oo
OO_ = 0
for OO in oo:
if OO - o0 > 1:
if Oo != o0:
oO[OO_] = `Oo` + `-o0`
else:
oO[OO_] = `Oo`
OO_ += 1
Oo = OO
o0 = OO
if Oo != o0:
oO[OO_] = `Oo` + `-o0`
else:
oO[OO_] = `Oo`
OO_ += 1
return ",".join(oO[:OO_])
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
> Es scheint numarray ist wieder so ein Paket das mit tausenden von pyd's
> arbeitet. In diesem Fall ist es wohl besser das komplette Paket zu
> inkludieren. Mit 'python setup.py py2exe -p numarray' ist es mir
> gelungen, numarray's examples\bench.py in ein exe zu konvertieren.
>
> Außerdem solltest Du Konstrukte wie diese vermeiden:
>
> from Numeric import *
> from numarray import zeros
> import numarray.linear_algebra as LA
>
> So wie ich das sehe definiert Numeric auch eine zeros() Funktion, schon
> alleine deshalb würde ich kein import * verwenden. Ich weiß zwar nicht
> ob py2exe das stört, aber man hat schon Kühe k*tzen sehen.
>
> HTH,
>
> Thomas
>
Ich habe versucht von Numeric nur noch die Packete die ich brauche zu
importieren, aber der Fehler blieb der gleich.
Allerdings funktioniert der Befehl 'python setup.py py2exe -p numarray'!!!!
Also vielen Dank Thomas!
Gruß Simon
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de