Hallo Leute, vielleicht kann mir jemand von euch bei meinem kleinen Problem helfen. Ich habe folgendes Problem. ich habe einene File, der aus einer Reihe von Zahlen besteht: z.B. 1012 1231 2121 2123 die Zahlen sind alle nur einmal in dem File vorhanden. Ich will nun aus dem der ersten zahl eine Kombination mit jeweils einer der anderen Zahlen bilden, also: 1012,1231 dann 1012,2121 dann... 1231,2121 dann 1231,2123 diese Zahlen Kombination verarbeite ich dann weiter... (spaeter sollen es auch 3er Kombinationen werden. Im Moment nehme ich aber immer alle Zahlen des Files um die Kombinationen zu bilden (fuer das Zahlenbeispiel oben 5^5 Kombinationen) das ist allerdings ungeschickt. schoener waere es wie oben dargestellt, also mit der ersten Zahl #Zahlen-1te Zahl, mit der 2. Zahl #Zahlen-1te und 2te Zahl usw, also am also nur 5*4*3*2 Kombinationen. Wie stelle ich das nun geschickt in Python an: Ich habe es versucht mit einem zaehler, der mir den file ab einer bestimmten Zeile anfaengt zulesen, aber wie mache ich das: file = open(.....)[a:] while 1: line=file.readline() if not line: break else: ... ... a=a++ Vielleicht hat ja jemand eine Idee fuer mein Problem... Vielen Dank schon mal im Vorraus. Mfg Joerg -- Joerg Krebs <krebsj@cip.ifi.lmu.de> _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Kanns sein, daß Du jemand suchst, der Dir deine Hausaufgaben macht? Cya, Gerald -----Ursprüngliche Nachricht----- Von: python-de-bounces@python.net [mailto:python-de-bounces@python.net] Im Auftrag von Joerg Krebs Gesendet: Dienstag, 11. April 2006 17:40 An: python-de@python.net Betreff: [Python-de] file einlesen Hallo Leute, vielleicht kann mir jemand von euch bei meinem kleinen Problem helfen. Ich habe folgendes Problem. ich habe einene File, der aus einer Reihe von Zahlen besteht: z.B. 1012 1231 2121 2123 die Zahlen sind alle nur einmal in dem File vorhanden. Ich will nun aus dem der ersten zahl eine Kombination mit jeweils einer der anderen Zahlen bilden, also: 1012,1231 dann 1012,2121 dann... 1231,2121 dann 1231,2123 diese Zahlen Kombination verarbeite ich dann weiter... (spaeter sollen es auch 3er Kombinationen werden. Im Moment nehme ich aber immer alle Zahlen des Files um die Kombinationen zu bilden (fuer das Zahlenbeispiel oben 5^5 Kombinationen) das ist allerdings ungeschickt. schoener waere es wie oben dargestellt, also mit der ersten Zahl #Zahlen-1te Zahl, mit der 2. Zahl #Zahlen-1te und 2te Zahl usw, also am also nur 5*4*3*2 Kombinationen. Wie stelle ich das nun geschickt in Python an: Ich habe es versucht mit einem zaehler, der mir den file ab einer bestimmten Zeile anfaengt zulesen, aber wie mache ich das: file = open(.....)[a:] while 1: line=file.readline() if not line: break else: ... ... a=a++ Vielleicht hat ja jemand eine Idee fuer mein Problem... Vielen Dank schon mal im Vorraus. Mfg Joerg -- Joerg Krebs <krebsj@cip.ifi.lmu.de> _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Dienstag, den 11.04.2006, 17:47 +0200 schrieb Gerald Klix:
Kanns sein, daß Du jemand suchst, der Dir deine Hausaufgaben macht?
Cya, Gerald
Nein, das ist keine Hausaufgabe !! Ich versuche jediglich eine triviale Loesung durch eine weniger zeitaufwendige zu verbessern. Mfg Joerg
-----Ursprüngliche Nachricht----- Von: python-de-bounces@python.net [mailto:python-de-bounces@python.net] Im Auftrag von Joerg Krebs Gesendet: Dienstag, 11. April 2006 17:40 An: python-de@python.net Betreff: [Python-de] file einlesen
Hallo Leute, vielleicht kann mir jemand von euch bei meinem kleinen Problem helfen.
Ich habe folgendes Problem. ich habe einene File, der aus einer Reihe von Zahlen besteht: z.B.
1012 1231 2121 2123
die Zahlen sind alle nur einmal in dem File vorhanden. Ich will nun aus dem der ersten zahl eine Kombination mit jeweils einer der anderen Zahlen bilden, also:
1012,1231 dann 1012,2121 dann... 1231,2121 dann 1231,2123
diese Zahlen Kombination verarbeite ich dann weiter... (spaeter sollen es auch 3er Kombinationen werden.
Im Moment nehme ich aber immer alle Zahlen des Files um die Kombinationen zu bilden (fuer das Zahlenbeispiel oben 5^5 Kombinationen)
das ist allerdings ungeschickt. schoener waere es wie oben dargestellt, also mit der ersten Zahl #Zahlen-1te Zahl, mit der 2. Zahl #Zahlen-1te und 2te Zahl usw, also am also nur 5*4*3*2 Kombinationen.
Wie stelle ich das nun geschickt in Python an:
Ich habe es versucht mit einem zaehler, der mir den file ab einer bestimmten Zeile anfaengt zulesen, aber wie mache ich das:
file = open(.....)[a:] while 1: line=file.readline() if not line: break else: ... ... a=a++
Vielleicht hat ja jemand eine Idee fuer mein Problem...
Vielen Dank schon mal im Vorraus.
Mfg Joerg
-- Joerg Krebs <krebsj@cip.ifi.lmu.de>
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On 11.04.06 17:58:39, Joerg Krebs wrote:
Am Dienstag, den 11.04.2006, 17:47 +0200 schrieb Gerald Klix:
Kanns sein, daß Du jemand suchst, der Dir deine Hausaufgaben macht?
Nein, das ist keine Hausaufgabe !!
Ich versuche jediglich eine triviale Loesung durch eine weniger zeitaufwendige zu verbessern.
Wieso liest du die Datei nicht zuerst komplett ein, packst die Zahlen in eine Liste und iterierst dann ueber diese? Da kannst du dann mit 2 verschachtelten Schleifen (so in der 1. Variant) relativ leicht in der inneren nur ueber die noch nicht gelesenen Elemente der Liste iterieren (Stichwort: slicing). Andreas -- The time is right to make new friends. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Dienstag, den 11.04.2006, 18:11 +0200 schrieb Andreas Pakulat:
On 11.04.06 17:58:39, Joerg Krebs wrote:
Am Dienstag, den 11.04.2006, 17:47 +0200 schrieb Gerald Klix:
Kanns sein, daß Du jemand suchst, der Dir deine Hausaufgaben macht?
Nein, das ist keine Hausaufgabe !!
Ich versuche jediglich eine triviale Loesung durch eine weniger zeitaufwendige zu verbessern.
Wieso liest du die Datei nicht zuerst komplett ein, packst die Zahlen in eine Liste und iterierst dann ueber diese? Da kannst du dann mit 2 verschachtelten Schleifen (so in der 1. Variant) relativ leicht in der inneren nur ueber die noch nicht gelesenen Elemente der Liste iterieren (Stichwort: slicing).
Andreas
Hallo, vielen Dank fuer den Tip mit dem slicing. Ich habs nun mit 2 for-schleifen und 2 variablen geloest, siehe anhang (sicher nicht wunderschoen programmiert) falls insteresse, einfach: python slicing.py bfab.short.dom Mfg Joerg
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo. Ist ziemlich viel Code gewrden. Dafür kann man sich auch längere Kombinationen erzeugen lassen: def helper2(l, length, i): res = [l[0]] for j in range(length-1): res.append(l[i+j]) return res def helper1(l, length): res = [] for i in range(1, len(l)+2-length): res.append( helper2(l, length, i) ) return res def comb(l, length): res = [] if len(l)<=length-1: return res res = helper1(l, length) return res + comb(l[1:], length) l = [1,2,3,4,5] print comb(l, 2) [[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]] print comb(l, 3) [[1, 2, 3], [1, 3, 4], [1, 4, 5], [2, 3, 4], [2, 4, 5], [3, 4, 5]] print comb(l, 4) [[1, 2, 3, 4], [1, 3, 4, 5], [2, 3, 4, 5]] On 11.04.2006, at 19:18, Joerg Krebs wrote:
Am Dienstag, den 11.04.2006, 18:11 +0200 schrieb Andreas Pakulat:
On 11.04.06 17:58:39, Joerg Krebs wrote:
Am Dienstag, den 11.04.2006, 17:47 +0200 schrieb Gerald Klix:
Kanns sein, daß Du jemand suchst, der Dir deine Hausaufgaben macht?
Nein, das ist keine Hausaufgabe !!
Ich versuche jediglich eine triviale Loesung durch eine weniger zeitaufwendige zu verbessern.
Wieso liest du die Datei nicht zuerst komplett ein, packst die Zahlen in eine Liste und iterierst dann ueber diese? Da kannst du dann mit 2 verschachtelten Schleifen (so in der 1. Variant) relativ leicht in der inneren nur ueber die noch nicht gelesenen Elemente der Liste iterieren (Stichwort: slicing).
Andreas
Hallo, vielen Dank fuer den Tip mit dem slicing. Ich habs nun mit 2 for-schleifen und 2 variablen geloest, siehe anhang (sicher nicht wunderschoen programmiert)
falls insteresse, einfach: python slicing.py bfab.short.dom
Mfg Joerg
<slicing.py> <bfab.short.dom>
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On 11 Apr 2006, krebsj@cip.ifi.lmu.de wrote:
vielen Dank fuer den Tip mit dem slicing. Ich habs nun mit 2 for-schleifen und 2 variablen geloest, siehe anhang (sicher nicht wunderschoen programmiert)
Jetzt sehe ich auch, was du eigentlich willst. Das geht doch einj wenig kürzer (und klarer IMO). f = open(sys.argv[1]) data = [s.strip() for s in f.readlines()] f.close() combs1 = [(data[:i][-1], s) for i in xrange(1, len(data)) for s in data[i:]] combs2 = ((data[:i][-1], s) for i in xrange(1, len(data)) for s in data[i:]) combs3 = lambda lst: ((lst[:i][-1], s) for i in xrange(1, len(lst)) for s in lst[i:]) def combs4 (lst): while lst: c = lst.pop(0) for e in lst: yield c, e Das sind jetzt 4 Möglichkeiten, die von dir gewünschten Kombinationen zu erzeugen. combs1 packt alles in eine Liste, combs2 ist ein Generator, combs3 und combs4 sind zwei Funktionen, die dir einen generator zurückgeben. Vielleicht ließe sich das ganze mit ein wenig nachdenken noch optimieren. Karl _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Joerg Krebs wrote:
Wie stelle ich das nun geschickt in Python an:
Ich würde ebenfalls die Zahlen zuerst alle einlesen lines = [] for line in open(...): lines.append(line.strip()) und dann der Reihe nach alle Paare bilden: for i in range(len(lines)): for k in range(i+1, len(lines)): print lines[i]+","+lines[k] Da die ks bei i+1 losgehen, bekommt man so alle Paare.
das ist allerdings ungeschickt. schoener waere es wie oben dargestellt, also mit der ersten Zahl #Zahlen-1te Zahl, mit der 2. Zahl #Zahlen-1te und 2te Zahl usw, also am also nur 5*4*3*2 Kombinationen.
Diese Rechnung ist mir unklar: Bei 4 Zahlen komme ich auf 3+2+1=6 Kombinationen, bei 5 Zahlen auf 4+3+2+1=10 Kombinationen. Ciao, Martin _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (6)
-
"Martin v. Löwis"
-
Andreas Pakulat
-
Gerald Klix
-
Joerg Krebs
-
Karl Pfl?sterer
-
Tobias Bender