2017-10-01 4 views
0

Ich habe zwei Listen:Permutation von zwei Listen

first = ["one", "two", "three"] 
second = ["five", "six", "seven"] 

Ich mag jede einzelne Kombination dieser beiden Listen aber mit Elementen aus der ersten Liste immer vor sein. Ich habe versucht, so etwas wie diese:

for i in range(0, len(combined) + 1): 
    for subset in itertools.permutations(combined, i): 
     print('/'.join(subset)) 

Wo „combined“ war diese beide Liste kombiniert, aber das gab mir alle Möglichkeiten, und ich will nur diejenigen, bei denen Elemente aus der ersten Liste an erster Stelle stehen. Zum Beispiel:

["onefive","twosix","twofive"] 

usw. Hat jemand eine Idee hat, wie könnte ich das machen?

+0

In diesem Beispiel möchten Sie alle 9 Kombinationen? –

+0

Ja, ich möchte alle 9 Kombinationen. – Nenad

Antwort

2

Dies sollte das tun, was Sie suchen:

>>> ["/".join(x) for x in itertools.product(first, second)] 
['one/five', 'one/six', 'one/seven', 'two/five', 'two/six', 'two/seven', 'three/five', 'three/six', 'three/seven'] 
>>> 

Sie es auch tun können, ohne itertools:

>>> [x + "/" + y for x in first for y in second] 
['one/five', 'one/six', 'one/seven', 'two/five', 'two/six', 'two/seven', 'three/five', 'three/six', 'three/seven'] 
>>> 
+0

Das OP möchte das kartesische Produkt. Die Verwendung von 'itertools.product' ist das Richtige. – mkrieger1

2

Manchmal normalen Loops ist die einfachste:

["{}/{}".format(j,k) for j in first for k in second] 

>>> ['one/five', 'one/six', 'one/seven', 'two/five', 'two/six', 
    'two/seven', 'three/five', 'three/six', 'three/seven'] 
+0

Ich stimme zu, sie sind sicherlich besser. Upvoted. –