2010-10-09 11 views
1
my_list = [[1,2],[1,3],[1,3],[1,3]] 
my_var = 7 

Mon objectif est d'être en mesure de voir si my_var est plus grand que tous les postes à my_list[0][1] et my_list[1][1] et my_list[2][1] et ainsi de suite.boucle imbriquée Python avec l'état

my_list peut varier en longueur et my_var peut également varier donc je pense qu'une boucle est le meilleur pari?

* très nouveau pour python

Répondre

4
all(variable > element for element in list) 

ou pour l'élément i des listes dans une liste

all(variable > sublist[i] for sublist in list) 

Ceci a l'avantage de coups de pied tôt si l'un des éléments est trop grand. Cela fonctionne parce que le ... for ... in list est une instance de Python puissant et multiforme generator expressions. Ils sont similaires à list comprehensions mais seuls génèrent des valeurs selon les besoins.

all lui-même vérifie juste pour voir si toutes les valeurs dans le iterable il est passé sont vraies. Les expressions de générateur, les compréhensions de liste, les listes, les tuples et d'autres sortes de séquences sont toutes des itérations.

Ainsi, la première instruction finit par être équivalent à appeler une fonction comme

def all_are_greater_than_value(list, value): 
    for element in list: 
     if element <= value: 
      return False 
    return True 

avec all_are_greater_than_value(list, variable) ...

ou simplement

all_greater = True 
for element in list: 
    if element <= value: 
     all_greater = False 
     break 

Cependant, l'expression du générateur est généralement préféré , étant plus concis et "idiomatique".

+0

+1. Je n'ai même pas pensé à ça – aaronasterling

+0

C'est plutôt cool. Merci! – Dtour

+0

C'est un excellent exemple de la capacité de Python à lire comme l'anglais. – intuited

1

Vous pouvez le faire comme ça aussi:

my_list = [[1,2],[1,3],[1,3],[1,3]] 
my_var = 7 
print all(all(x < my_var for x in sublist) for sublist in my_list)