Est-ce que quelqu'un sait quelque chose d'équivalent à itertools.tee
mais avec la possibilité d'ajouter dynamiquement des itérateurs?Python: itertools.tee avec des itérateurs créés dynamiquement
La fonction itertools.tee
fait exactement ce que je veux, sauf que le nombre d'itérateurs doit être fixé lors de l'appel de la fonction. Je voudrais quelque chose avec des fonctionnalités équivalentes, mais qui permette d'ajouter de nouveaux itérateurs plus tard, potentiellement même après que certains itérateurs aient commencé à itérer. Je voudrais éviter d'appeler itertools.tee
plusieurs fois, car cela va potentiellement utiliser beaucoup de mémoire (je pourrais avoir des millions d'itérateurs). De la documentation Python pour itertools.tee
:
Le code suivant Python permet d'expliquer ce tee fait (bien que la mise en œuvre effective est plus complexe et utilise une seule file d'attente FIFO sous-jacente).
...
Si de nouveaux itérateurs sont ajoutés par la suite, ils ne doivent voir les données nouvellement arrivée.
Voici un exemple de code de ce que je voudrais avoir (peut-être pas syntaxiquement correct):
input_iterator = iter([1, 2, 3, 4, 5, 6])
tee = EnhancedTee(input_iterator)
it1 = iter(tee)
val = it1.next()
# val == 1
it2 = iter(tee)
val = it2.next()
# val == 2
val = it1.next()
# val == 2
nous montrer un exemple, car pour autant que je l'ai lu et je sais que vous pouvez toujours utiliser Vous 'tee' – Netwave
devra stocker tous les éléments dans l'itérateur pour faire de cette travailler de toute façon, il suffit de le convertir en une liste. Vous pouvez créer autant d'itérateurs que vous le souhaitez pour une liste en utilisant 'iter (my_list)'. –
* potentiellement même après que certains des itérateurs ont commencé à itérer *, alors pourquoi ne pas garder un itérateur de référence et en faire de nouvelles copies avec 'tee' quand vous en aurez besoin. –