Ich bin gespannt auf den schnellsten Weg, um eine Liste der Liste "Elemente" ohne * Änderungen * ohne "Elemente [i]" zu erhalten, oder auf eine relativ schnelle und intelligente Schreibweise (manchmal ohne das i-te in der Mathematik). Weil ich so etwas will).
Ich habe es mit% timeit von Jupyter gemessen.
items = list(range(1000000))
i = 17 #geeignet
%timeit items[:i] + items[i+1:]
11.2 ms ± 349 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
enumerate
)%timeit [item for k, item in enumerate(items) if k != i]
65.1 ms ± 212 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit [items[k] for k in range(len(items)) if k != i]
75.5 ms ± 800 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Es scheint, dass das Schneiden überwältigend schneller ist. Ich war übrigens ein wenig überrascht, dass die Verwendung der zweiten "Aufzählung" schneller ist als die des dritten Beispiels.
@ antimon2's Maru Park, aber es gibt die folgenden Methoden.
import numpy as np
items = np.arange(1000000)
i = 17
np.hstack
%timeit np.hstack([items[:i], items[i+1:]])
584 µs ± 6.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
np.delete
%timeit np.delete(items, i)
585 µs ± 3.73 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit items[np.arange(items.size) != i]
1.9 ms ± 5.82 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit np.array([items[k] for k in range(len(items)) if k != i])
182 ms ± 3.85 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Auch hier verbinden sich die Scheiben sehr schnell. Ist "np.delete" in Bezug auf die Lesbarkeit die beste, weil sich die Geschwindigkeit nicht so stark ändert?
Wenn Sie andere gute haben, lassen Sie es mich bitte wissen.
Recommended Posts