Il y a plusieurs façons de procéder :
La méthode simple : une variable sentinelle
n = L[0][0]
m = len(A)
found = False
for i in range(m):
if found:
break
for j in range(m):
if L[i][j] != n:
found = True
break
Avantages : facile à comprendre Inconvénients : déclaration conditionnelle supplémentaire pour chaque boucle
La méthode hacky : lever une exception
n = L[0][0]
m = len(A)
try:
for x in range(3):
for z in range(3):
if L[i][j] != n:
raise StopIteration
except StopIteration:
pass
Avantages : très simple Inconvénients : vous utilisez l'exception en dehors de sa sémantique
La méthode propre : créer une fonction
def is_different_value(l, elem, size):
for x in range(size):
for z in range(size):
if l[i][j] != elem:
return True
return False
if is_different_value(L, L[0][0], len(A)):
print "Doh"
avantages : beaucoup plus propre et toujours efficace inconvénients : on a l'impression d'être en C
La méthode pythonique : utiliser l'itération comme il se doit
def is_different_value(iterable):
first = iterable[0][0]
for l in iterable:
for elem in l:
if elem != first:
return True
return False
if is_different_value(L):
print "Doh"
avantages : toujours propre et efficace inconvénients : il faut réinventer la roue
La méthode du gourou : utiliser any()
:
def is_different_value(iterable):
first = iterable[0][0]
return any(cell != first for col in iterable for cell in col)
if is_different_value(L):
print "Doh"
avantages : vous vous sentirez plus fort grâce à vos pouvoirs obscurs inconvénients : les personnes qui liront votre code pourraient commencer à vous détester