Ich habe eine Liste von Listen und eine Trennzeichenfolge wie diese:
lists = [
['a', 'b'],
[1, 2],
['i', 'ii'],
]
separator = '-'
Als Ergebnis möchte ich eine Liste von Zeichenfolgen mit einer Trennzeichenfolge aus den Zeichenfolgen in den Unterlisten kombinieren:
result = [
'a-1-i',
'a-1-ii',
'a-2-i',
'a-2-ii',
'b-1-i',
'b-1-ii',
'b-2-i',
'b-2-ii',
]
Die Reihenfolge im Ergebnis ist irrelevant.
Wie kann ich das machen?
4 Antworten
from itertools import product
result = [separator.join(map(str,x)) for x in product(*lists)]
itertools.product
gibt einen Iterator zurück, der das kartesische Produkt der bereitgestellten Iterablen erzeugt. Wir müssen map
str
über die resultierenden Tupel setzen, da einige der Werte Ints sind. Schließlich können wir die stringifizierten Tupel verbinden und das Ganze in ein Listenverständnis werfen (oder einen Generatorausdruck, wenn es sich um einen großen Datensatz handelt und Sie ihn nur für die Iteration benötigen).
["%s%c%s%c%s" % (a, separator, b, separator, c) for a in lists[0] for b in lists[1] for c in lists[2]]
>>> from itertools import product
>>> result = list(product(*lists))
>>> result = [separator.join(map(str, r)) for r in result]
>>> result
['a-1-i', 'a-1-ii', 'a-2-i', 'a-2-ii', 'b-1-i', 'b-1-ii', 'b-2-i', 'b-2-ii']
Wie @jpm hervorhob, müssen Sie list
nicht wirklich in den product
Generator umwandeln. Ich hatte diese, um die Ergebnisse in meiner Konsole zu sehen, aber sie werden hier nicht wirklich benötigt.
Sie können dies mit eingebauten Funktionen tun:
>>> map(separator.join, reduce(lambda c,n: [a+[str(b)] for b in n for a in c], lists, [[]]))
['a-1-i', 'b-1-i', 'a-2-i', 'b-2-i', 'a-1-ii', 'b-1-ii', 'a-2-ii', 'b-2-ii']
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.