Die Implementierung hat sich von sum zu deque geändert. Warum deque?
python3
from collections import deque
n = 10000
%timeit sum(1 for _ in range(n)) # 2.5
%timeit deque(enumerate(range(n), 1), maxlen=1)[0][0] # 2.6
>>>
1000 loops, best of 3: 439 µs per loop
1000 loops, best of 3: 289 µs per loop
In der Tat wird es schneller.
Teilen Sie in die angegebene Anzahl, so dass sie ungefähr gleich groß sind.
python3
from more_itertools import divide, always_iterable, adjacent, groupby_transform, context
[tuple(i) for i in divide(3, range(10))]
>>>
[(0, 1, 2, 3), (4, 5, 6), (7, 8, 9)]
Iterierbar bleibt wie es ist, und nicht iterierbare werden iterierbar.
python3
always_iterable(None)
>>>
()
always_iterable(1)
>>>
(1,)
always_iterable([1,3,5])
>>>
[1, 3, 5]
Setzen Sie True vor und nach der Übereinstimmung der Bedingungen.
python3
list(adjacent(lambda x: x==3, range(7)))
>>>
[(False, 0),
(False, 1),
(True, 2),
(True, 3),
(True, 4),
(False, 5),
(False, 6)]
list(adjacent(lambda x: x==3, range(7), distance=2)) #Bis zu 2 Unterschiede vorher und nachher
>>>
[(False, 0),
(True, 1),
(True, 2),
(True, 3),
(True, 4),
(True, 5),
(False, 6)]
Konvertieren Sie Schlüssel und Werte nach der Gruppierung.
python3
[(i,list(j)) for i,j in groupby_transform([1,1,3,2,2,2],
lambda x: f'<{x}>', #Schlüsselkonvertierung
lambda x: x*10)] #Wertumwandlung
>>>
[('<1>', [10, 10]), ('<3>', [30]), ('<2>', [20, 20, 20])]
Derjenige, mit dem mit verwendet werden kann, wird als Generator verwendet.
python3
with open(Dateiname) as fp:
print(fp.read())
↓ Sie können so schreiben
print(*[fp.read() for fp in context(open(Dateiname))])
Referenz: Einführung von itertools und mehr-itertools
das ist alles
Recommended Posts