Tauschen Sie 1000 Yen gegen eine Kombination aus 500 Yen Bällen, 100 Yen Bällen, 50 Yen Bällen und 10 Yen Bällen. Die Gesamtzahl der Münzen beträgt jedoch 15 oder weniger.
Code Löse ohne nachzudenken
#Q05 Zahlen Sie immer noch in bar?
combinations = [] #Liste der Kombinationen
for c500 in range(3):
for c100 in range(11):
for c50 in range(16):
for c10 in range(16):
if c500 + c100 + c50 + c10 <= 15:
if c500 * 500 + c100 * 100 + c50 * 50 + c10 *10 == 1000:
combinations.append((c500, c100, c50, c10))
print(combinations)
print(len(combinations))
Schreiben Sie mit möglichst wenigen Wiederholungen von for-Anweisungen
import itertools
import numpy as np
combinations = []
for c in list(itertools.product(list(range(16)), repeat=4)):
m = np.array(list(c)) * np.array([500, 100, 50, 10])
if np.sum(c) <= 15 and np.sum(m) == 1000:
combinations.append(c)
print(combinations)
print(len(combinations))
Der Code ist kürzer geworden, aber ich denke nicht, dass er viel schneller und weniger lesbar ist, daher dient er nur als Referenz. .. ..
Was ich sagen möchte, ist das bei der Verarbeitung um das Array
Wenn Sie herumjagen, finden Sie Tools, die einfacher zu implementieren sind.
Das Folgende ist eine Ergänzung zu den diesmal verwendeten Werkzeugen.
itertools.product Finden Sie das direkte Produkt der Sequenz. Sie können die Wiederholungsoption verwenden, um das direkte Produkt mit sich selbst zu finden. Gibt ein itertools-Objekt zurück, kann aber in eine Liste umgewandelt werden. Das folgende Verwendungsbeispiel.
import itertools
x = ['a', 'b']
y = ['c', 'd']
z = list(range(3)) #[0, 1, 2]
print(list(itertools.product(x, y)))
#[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]
print(list(itertools.product(x, repeat=2)))
#[('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]
print(list(itertools.product(z, repeat=2)))
#[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
In einer normalen Liste steht das Pluszeichen für eine Verkettung der Liste. Andere arithmetische Symbole sind Fehler. Wenn Sie in numpy die Liste mit einem Operationssymbol verbinden, wird die Liste der Ergebnisse der Berechnung der Elemente an derselben Position zurückgegeben.
import numpy as np
x = [1, 3, 5]
y = [2, 4, 6]
print(x + y) #[1, 3, 5, 2, 4, 6]
print(x - y) #error
print(x * y) #error
print(x / y) #error
print(np.array(x) + np.array(y)) # [ 3 7 11]
print(np.array(x) - np.array(y)) # [-1 -1 -1]
print(np.array(x) * np.array(y)) # [ 2 12 30]
print(np.array(x) / np.array(y)) # [0.5 0.75 0.83333333]
Recommended Posts