Maîtriser itertools: islice, takewhile et dropwhile en Python

Itertools : Bornes avec conditions
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Maîtriser Python
Revoir le teaser Je m'abonne
5,0
Transcription


99,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

DescriptionProgrammeAvis
5,0

99,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

Les objectifs de cette vidéo sont d'apprendre à utiliser les fonctions islice, takewhile et dropwhile de la bibliothèque itertools pour manipuler des séquences en fonction de conditions spécifiques.

Apprenez à utiliser itertools en Python pour manipuler des séquences en fonction de conditions spécifiques avec les fonctions islice, takewhile et dropwhile.

Dans cette leçon, nous explorons l'utilisation avancée des fonctions de la bibliothèque itertools en Python, notamment islice, takewhile et dropwhile. L'objectif principal est de montrer comment ces fonctions permettent de manipuler des séquences en fonction de conditions bien définies.

Islice est utilisé pour obtenir un sous-ensemble de séquences basé sur des indices. Toutefois, lorsque les bornes doivent être basées sur la nature des éléments et non sur leur position, takewhile et dropwhile entrent en jeu.

Takewhile et dropwhile ressemblent au slicing traditionnel, mais avec des conditions. Takewhile récupère des éléments tant que la condition est vraie, tandis que dropwhile ignore les éléments jusqu'à ce qu'une condition soit fausse, puis récupère tous les éléments suivants, peu importe s'ils respectent la condition ou non.

Nous illustrons cela à l'aide d'exemples concrets, en montrant comment dropwhile peut être utilisé pour commencer à récupérer des éléments dès qu'une condition, telle que X >= 60, est remplie, et comment takewhile arrête de récupérer des éléments dès que cette condition n'est plus satisfaite.

Voir plus
Questions réponses
Quelle est la fonction de base de <em>dropwhile</em>?
La fonction de dropwhile est d'ignorer les éléments d'une séquence tant qu'une condition donnée est vraie, puis de récupérer tous les éléments suivants.
Quelle est la différence entre <em>takewhile</em> et <em>dropwhile</em>?
Takewhile récupère les éléments tant qu'une condition est remplie, tandis que dropwhile ignore les éléments tant qu'une condition est remplie, puis récupère les éléments suivants.
Comment <em>islice</em> diffère-t-il de <em>takewhile</em> et <em>dropwhile</em>?
Islice récupère les éléments basés sur des indices de position, tandis que takewhile et dropwhile récupèrent ou ignorent les éléments basés sur des conditions prédéfinies appliquées aux valeurs.

Programme détaillé

2 commentaires
5,0
2 votes
5
4
3
2
1
michelkreutner
Il y a 11 months
Commentaire
Les explications sont claires et concises. Ce cours sur l'utilisation avancée de Python est tres intéressant. Il vous apportera des connaissances que vous pourrez ensuite approfondir.
Je suis vraiment tres satisfait par cette première formation suivie sur Python.
yvan.vogel
Il y a 2 years
Commentaire
Hello, sur la video autour de asyncio, vous utilisez python 2.7.12. J'utilise python 3.10, aussi je souhaite faire partager mon code (qui fonctionne) selon ma vision et compréhension sur le sujet d'étude que vous avez proposé. Yvan Vogel.

#CODE en python 3.10.0 64 bits (VScode 1.62.3)
import datetime
import asyncio
import aiohttp
import requests


# ----------------------------------------------------------------------------------------------------------------------------
def req_bloquante(num):
print(f"Get {num}")
uid = requests.get("https://httpbin.org/uuid").json()["uuid"]
print(f"Res {num}: {uid}")


def faire_toutes_les_requetes():
for x in range(51):
req_bloquante(x)


print("=====> ### Bloquant : ")
start = datetime.datetime.now()
faire_toutes_les_requetes()
exec_time = (datetime.datetime.now() - start).seconds
print(f"Downloading all take {exec_time} seconds\n")

# ----------------------------------------------------------------------------------------------------------------------------


async def requeteSansBloquer(semaphore, num, session):
print(f"Get {num}")
# await semaphore.acquire() # putting this await semaphore commande the Res is ordering but process very slow ~60 sec
async with session.get("https://httpbin.org/uuid") as response:
uid = (await response.json())["uuid"]
# await asyncio.sleep(delay=3) #delay = number of seconds
# semaphore.release()
print(f"Res {num}: {uid}")
# return uid # ?


async def main():
semaphore = asyncio.Semaphore(value=1)
tasks = []
async with aiohttp.ClientSession(
loop=loop, connector=aiohttp.TCPConnector(ssl=False)
) as session:
for x in range(51):
tasks.append(requeteSansBloquer(semaphore, x, session))
await asyncio.gather(*tasks)
print("This is after the loop...")


if __name__ == "__main__":
print("=====> ### Non Bloquant : ")
start = datetime.datetime.now()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
exec_time = (datetime.datetime.now() - start).microseconds
print(f"Downloading all take {exec_time} micro seconds\n")