Forum:  Programmieren
Thema: Python: einelementige Kombinationen aus Listen
Themen-Übersicht
mrdjv2
Aktiv
Dabei seit: 05.07.2003
Mitteilungen: 1001
Wohnort: Aachen
Themenstart: 2021-02-27 00:07

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


tactac
Senior
Dabei seit: 15.10.2014
Mitteilungen: 2048
Beitrag No.1, eingetragen 2021-02-27 00:51

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))



Nuramon
Senior
Dabei seit: 23.01.2008
Mitteilungen: 2704
Beitrag No.2, eingetragen 2021-02-27 01:04

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.


mrdjv2
Aktiv
Dabei seit: 05.07.2003
Mitteilungen: 1001
Wohnort: Aachen
Beitrag No.3, vom Themenstarter, eingetragen 2021-03-01 21:19

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...




Dieses Forumbeitrag kommt von Matroids Matheplanet
https://https://matheplanet.de

Die URL für dieses Forum-Thema ist:
https://https://matheplanet.de/default3.html?topic=252581=5101
Druckdatum: 2021-05-06 21:57