Ich habe zwei Listen mit Zahlen, z. B. [1, 2, 3, 4, 5] und [7, 8, 9, 10, 11], und ich möchte eine neue Liste erstellen, die aus den Produkten jedes Mitglieds in der ersten Liste mit jedem Mitglied in der zweiten Liste besteht. In diesem Fall würde die neue Liste 5 * 5 = 25 Elemente enthalten.

Ich konnte dies bisher mit einer while () - Schleife nicht tun. Das habe ich bisher:

x = 0
y = 99
results = []
while x < 5:
    x = x + 1
    results.append(x*y)
while y < 11:
    y = y + 1
    results.append(x*y)
0
Aniruddh Agarwal 3 Dez. 2013 im 17:42

5 Antworten

Beste Antwort

Warum versuchst du es nicht mit bekannten alten Methoden?

list1 = range(1, 100)
list2 = range(10, 50, 5)

new_values = []

for x in list1:
    for y in list2:
        new_values.append(x*y)
1
FallenAngel 3 Dez. 2013 im 13:56

Verwenden Sie itertools.product, um alle möglichen 2-Tupel zu generieren , dann berechnen Sie das Produkt daraus:

[x * y for (x, y) in itertools.product([1,2,3,4,5], [7,8,9,10,11])]
9
Frerich Raabe 3 Dez. 2013 im 13:48

Ohne Importieren können Sie Folgendes tun:

[x * y for x in range(1, 6) for y in range(7, 12)]

Oder alternativ:

[[x * y for x in range(1, 6)] for y in range(7, 12)]

Um die verschiedenen Vielfachen aufzuteilen, hängt es jedoch davon ab, in welcher Reihenfolge die Ergebnisse angezeigt werden sollen.

1
jonrsharpe 3 Dez. 2013 im 13:56

Das Problem ist ein Beispiel für ein Außenprodukt. Die Antwort, die bereits mit itertools.product gepostet wurde, ist die Art und Weise, wie ich dies auch tun würde.

Aber hier ist eine Alternative mit Numpy, die normalerweise effizienter ist als die Arbeit in reinem Python zum Knacken numerischer Daten.

>>> import numpy as np
>>> x1 = np.array([1,2,3,4,5])
>>> x2 = np.array([7,8,9,10,11])
>>> np.outer(x1,x2)
array([[ 7,  8,  9, 10, 11],
       [14, 16, 18, 20, 22],
       [21, 24, 27, 30, 33],
       [28, 32, 36, 40, 44],
       [35, 40, 45, 50, 55]])
>>> np.ravel(np.outer(x1,x2))
array([ 7,  8,  9, 10, 11, 14, 16, 18, 20, 22, 21, 24, 27, 30, 33, 28, 32,
       36, 40, 44, 35, 40, 45, 50, 55])
2
wim 3 Dez. 2013 im 13:55
from functools import partial

mult = lambda x, y: x * y

l1 = [2,3,4,5,5]
l2 = [5,3,23,4,4]

results = []

for n in l1:
    results.extend( map( partial(mult, n) , l2) )

print results
0
Raydel Miranda 3 Dez. 2013 im 14:39