Kombinationen zwischen zwei Listen?

Es ist schon eine Weile her und ich habe Schwierigkeiten, meinen Kopf um einen Algorithmus zu wickeln, den ich versuche zu machen. Grundsätzlich habe ich zwei Listen und möchte alle Kombinationen der beiden Listen bekommen.

Ich könnte es nicht richtig erklären, also hier ist ein Beispiel.

name = 'a', 'b' number = 1, 2 

Die Ausgabe in diesem Fall wäre:

 1. A1 B2 2. B1 A2 

Der heikle Teil kann ich noch mehr Items in der Variablen "name" haben als Items in der Variable "number" (Nummer ist immer gleich oder kleiner als die Variable name).

Ich bin verwirrt, wie man alle Kombinationen (verschachtelt für Loop?) Und noch mehr verwirrt auf der Logik, um die Elemente in der Namensvariable verschieben, falls es mehr Elemente im Namen gibt, als sie in der Nummernliste sind.

Ich bin nicht der beste Programmierer, aber denke, ich kann ihm einen Schuss geben, wenn jemand mir helfen kann, die Logik zu klären / algoriythm, um dies zu erreichen. Also habe ich gerade auf verschachtelt geschleppt.

Aktualisieren:

Hier ist die Ausgabe mit 3 Variablen und 2 Nummern:

 name = 'a', 'b', 'c' number = 1, 2 

Ausgabe:

 1. A1 B2 2. B1 A2 3. A1 C2 4. C1 A2 5. B1 C2 6. C1 B2 

7 Solutions collect form web for “Kombinationen zwischen zwei Listen?”

Angenommen, len(list1) >= len(list2) . Dann, was du zu sehen wünschst, ist, alle Permutationen der Länge len(list2) aus list1 und sie mit Items aus list2 zu vergleichen. In python:

 >>> import itertools >>> list1=['a','b','c'] >>> list2=[1,2] >>> [zip(x,list2) for x in itertools.permutations(list1,len(list2))] [[('a', 1), ('b', 2)], [('a', 1), ('c', 2)], [('b', 1), ('a', 2)], [('b', 1), ('c', 2)], [('c', 1), ('a', 2)], [('c', 1), ('b', 2)]] 

Der einfachste Weg ist, itertools.product zu verwenden:

 a = ["foo", "melon"] b = [True, False] c = list(itertools.product(a, b)) >> [("foo", True), ("foo", False), ("melon", True), ("melon", False)] 

Vielleicht einfacher als die einfachste oben:

 a = ["foo", "bar"] b = [1, 2, 3] [(x,y) for x in a for y in b] >>>[('foo', 1), ('foo', 2), ('foo', 3), ('bar', 1), ('bar', 2), ('bar', 3)] 

Ohne Import

Eine winzige Verbesserung für die Antwort von interjay, um das Ergebnis als eine flache Liste zu machen.

 >>> list3 = [zip(x,list2) for x in itertools.permutations(list1,len(list2))] >>> import itertools >>> chain = itertools.chain(*list3) >>> list4 = list(chain) [('a', 1), ('b', 2), ('a', 1), ('c', 2), ('b', 1), ('a', 2), ('b', 1), ('c', 2), ('c', 1), ('a', 2), ('c', 1), ('b', 2)] 

Referenz von diesem Link

Ohne itertools

 [(list1[i], list2[j]) for i in xrange(len(list1)) for j in xrange(len(list2))] 

Ich suchte nach einer Liste multipliziert mit sich selbst mit nur einzigartigen Kombinationen, die als diese Funktion zur Verfügung gestellt wird.

 import itertools itertools.combinations(list, n_times) 

Hier als Auszug aus dem Python docs auf itertools Das könnte dir helfen zu finden, was du suchst.

 Combinatoric generators: Iterator | Results -----------------------------------------+---------------------------------------- product(p, q, ... [repeat=1]) | cartesian product, equivalent to a | nested for-loop -----------------------------------------+---------------------------------------- permutations(p[, r]) | r-length tuples, all possible | orderings, no repeated elements -----------------------------------------+---------------------------------------- combinations(p, r) | r-length tuples, in sorted order, no | repeated elements -----------------------------------------+---------------------------------------- combinations_with_replacement(p, r) | r-length tuples, in sorted order, | with repeated elements -----------------------------------------+---------------------------------------- product('ABCD', repeat=2) | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD permutations('ABCD', 2) | AB AC AD BA BC BD CA CB CD DA DB DC combinations('ABCD', 2) | AB AC AD BC BD CD combinations_with_replacement('ABCD', 2) | AA AB AC AD BB BC BD CC CD DD 

Vielleicht möchten Sie ein One-Line-Listenverstehen ausprobieren:

 >>> [name+number for name in 'ab' for number in '12'] ['a1', 'a2', 'b1', 'b2'] >>> [name+number for name in 'abc' for number in '12'] ['a1', 'a2', 'b1', 'b2', 'c1', 'c2'] 
  • Wie man die Höhe eines Knotens im Binärbaum rekursiv findet
  • Längste wiederholte (k-mal) Teilstring
  • Einfache Python Challenge: Schnellste Bitweise XOR auf Datenpuffer
  • Hyper Strings InterviewStreet: Python
  • Turbo sort - Zeitlimit überschritten
  • Finden Sie das erste nicht wiederholte Zeichen in einer Zeichenfolge
  • Wie finde ich eine Kreuzung von zwei großen Dateien effizient mit Python?
  • Kollaborative Filterung: Nicht-personalisierte Artikel-zu-Item-Ähnlichkeit
  • Umgang mit großen Zahlen in Code
  • Berechnen Sie STD manuell mit Groupby Pandas DataFrame
  • Python (Fußballspiele Algorithmus Probleme)
  • Python ist die beste Programmiersprache der Welt.