La mise en œuvre est passée de somme à deque. Pourquoi 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
En effet, cela s'accélère.
Divisez en le nombre spécifié afin qu'ils aient approximativement la même taille.
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)]
Iterable reste tel quel, et les non-itérables deviennent itérables.
python3
always_iterable(None)
>>>
()
always_iterable(1)
>>>
(1,)
always_iterable([1,3,5])
>>>
[1, 3, 5]
Définissez True avant et après où les conditions correspondent.
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)) #Jusqu'à 2 différences avant et après
>>>
[(False, 0),
(True, 1),
(True, 2),
(True, 3),
(True, 4),
(True, 5),
(False, 6)]
Convertissez les clés et les valeurs après le regroupement.
python3
[(i,list(j)) for i,j in groupby_transform([1,1,3,2,2,2],
lambda x: f'<{x}>', #Conversion de clé
lambda x: x*10)] #Conversion de valeur
>>>
[('<1>', [10, 10]), ('<3>', [30]), ('<2>', [20, 20, 20])]
Celui qui peut être utilisé avec est utilisé comme générateur.
python3
with open(nom de fichier) as fp:
print(fp.read())
↓ Tu peux écrire comme ça
print(*[fp.read() for fp in context(open(nom de fichier))])
Référence: Introduction d'itertools et plus-itertools
c'est tout
Recommended Posts