20 votes

chaque élément de la liste est un booléen vrai

Je sais que

all(map(compare,new_subjects.values()))==True

me dirait si chaque élément de la liste est vrai. Cependant, comment puis-je savoir si chaque élément, sauf l'un d'entre eux, est vrai ?

11voto

Rafe Kettler Points 29389
values = map(compare, new_subjects.values())
len([x for x in values if x]) == len(values) - 1

En gros, vous filtrez la liste pour trouver les valeurs vraies et vous comparez la longueur de cette liste à l'original pour voir si elle est inférieure d'une unité.

7voto

DTing Points 12969

Si vous voulez dire que c'est en fait True et ne s'évalue pas à True, vous pouvez juste les compter ?

>>> L1 = [True]*5
>>> L1
[True, True, True, True, True]
>>> L2 = [True]*5 + [False]*2
>>> L2
[True, True, True, True, True, False, False]
>>> L1.count(False)
0
>>> L2.count(False)
2
>>> 

la vérification d'un seul Faux :

>>> def there_can_be_only_one(L):
...     return L.count(False) == 1
... 
>>> there_can_be_only_one(L1)
False
>>> there_can_be_only_one(L2)
False
>>> L3 = [ True, True, False ]
>>> there_can_be_only_one(L3)
True
>>> 

éditer : Cela répond mieux à votre question :

>>> def there_must_be_only_one(L):
...     return L.count(True) == len(L)-1
... 
>>> there_must_be_only_one(L3)
True
>>> there_must_be_only_one(L2)
False
>>> there_must_be_only_one(L1)
False

4voto

Jochen Ritzel Points 42916

Comptez le nombre de ceux qui ne sont pas vrais :

values = (compare(val) for val in new_subjects.itervalues())
if sum(1 for x in values if not x) == 1: # just one
    ...

0voto

Paddy3118 Points 1770

En supposant que la fonction de comparaison renvoie une valeur booléenne, et en sachant que Vrai/Faux devient 1/0 dans un contexte d'entier, vous pouvez le faire :

values = new_subjects.values()
sum(compare(v) for v in values) == len(values) -1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X