Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: einelementige Kombinationen aus Listen
Druckversion
Druckversion
Antworten
Antworten
Autor
Kein bestimmter Bereich Python: einelementige Kombinationen aus Listen
mrdjv2
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.07.2003
Mitteilungen: 999
Herkunft: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2021-02-27


Hallo zusammen,

ich hab ein eigentlich relativ einfaches Problem. Ich habe eine Liste von Listen (z.B. [[1, 4, 9, 7], [1, 3, 4, 7], [1, 3, 5, 7]]). In diesem Beispiel sind die Einzellisten nur zufällig vier Einträge lang. Es sind aber immer mindestens 2 Einträge und höchstens 9 Einträge.

Ich interessiere mich nun für alle Möglichkeiten, wenn ich aus jeder Teilliste genau eine Zahl herausziehe.

Im oberen Beispiel wäre das etwa (zumindest der Anfang):
[1, 1, 1]
[1, 1, 3]
[1, 1, 5]
[1, 1, 7]

[1, 3, 1]
[1, 3, 3]
.
.
.

Weiß jemand, wie ich das in Python einfach realisiert bekomme?

Danke und Gruß
Daniel



-----------------
Never underestimate the impossible!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
tactac
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 15.10.2014
Mitteilungen: 2035
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2021-02-27


Ohne groß auf Performance zu achten, eine Umsetzung mittels einer Übersetzung einer Instanz von Haskells sequence:
Python
def sequence(xss):
    if len(xss) == 0:
        yield []
        return
    for x in xss[0]:
        for xs in sequence(xss[1:]):
            yield [x]+xs
 
def oneofeach(xss):
    return list(sequence(xss))




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Nuramon
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 2668
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2021-02-27


Hallo,

mit itertools.product:
Python
from itertools import product
x = [[1, 4, 9, 7], [1, 3, 4, 7], [1, 3, 5, 7]]
 
y = list(map(list, product(*x))) 
Wenn du nicht explizit auf eine Liste von Listen als Resultat bestehst, kannst du dir das Mapping am Ende natürlich sparen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
mrdjv2
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.07.2003
Mitteilungen: 999
Herkunft: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2021-03-01


Vielen Dank!

Im Prinzip macht das ja alles, was ich haben möchte, aber es ist doch deutlich langsamer als ich erwartet habe.
Bei einer Liste mit 54 Listen ist das alles nicht mehr ganz so performant...

Mal sehen, ob ich da noch etwas ausdünnen kann...


-----------------
Never underestimate the impossible!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
mrdjv2 hat die Antworten auf ihre/seine Frage gesehen.
mrdjv2 wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]