Je dispose d'une liste qui contient de nombreuses sous-listes de 3 éléments chacune, comme suit :
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
Le dernier élément de chaque sous-liste est une sorte de drapeau, qui est initialement à 0 pour chaque sous-liste. Au fur et à mesure que mon algorithme progresse, je veux vérifier si ce drapeau est à 0 pour au moins un élément. Actuellement, j'utilise une boucle while, comme ceci :
def check(list_):
for item in list_:
if item[2] == 0:
return True
return False
L'algorithme global boucle tant que cette condition est satisfaite, et définit certains des drapeaux à chaque itération :
while check(my_list):
for item in my_list:
if condition:
item[2] = 1
else:
do_sth()
Parce que cela pose des problèmes de supprimer des éléments de la liste tout en itérant dessus, j'utilise ces drapeaux pour suivre les éléments qui ont déjà été traités.
Comment puis-je simplifier ou accélérer le code ?
Voir aussi <a href="https://stackoverflow.com/questions/1342601/">Manière pythonique de vérifier si une condition est vraie pour n'importe quel élément d'une liste</a> pour vérifier la condition pour n'importe quel élément. Gardez à l'esprit que les vérifications "any" et "all" sont liées <a href="https://stackoverflow.com/questions/2168603/">par la loi de De Morgan</a>, tout comme "or" et "and" sont liés.
Les réponses existantes utilisent la fonction intégrée <code>all</code> pour faire l'itération. Consultez <a href="https://stackoverflow.com/questions/19389490">Comment fonctionnent les fonctions any et all de Python ?</a> pour une explication de <code>all</code> et de son homologue, <code>any</code>.
Si la condition que vous souhaitez vérifier est "est trouvée dans un autre conteneur", consultez <a href="https://stackoverflow.com/questions/3931541/">Comment vérifier si tous les éléments suivants sont dans une liste ?</a> et son homologue, <a href="https://stackoverflow.com/questions/740287">Comment vérifier si l'un des éléments suivants est dans une liste ?</a>. Utiliser <code>any</code> et <code>all</code> fonctionnera, mais des solutions plus efficaces sont possibles.