2010-10-03 19 views
-2

Bonjour je veux comparer deux listes comme cettePython comparant deux listes

a = [1,2] b = 10,20] comparer (a, b) retourne vrai si chaque élément est dans un> correspondant élément en b

afin de comparer ([1,2]> [3,4]) est vrai

comparer ([1,20]> [3,4]) est faux

hiow à faites cela de manière pythonique

À la vôtre

+2

Vous devriez prendre plus de temps pour écrire votre question. Définissez des blocs de code avec une indentation de 4 espaces, vérifiez l'orthographe et essayez d'utiliser la ponctuation anglaise appropriée. Les gens sont plus susceptibles de passer du temps à répondre s'il semble que vous mettez du temps à écrire votre question. –

+1

Vous avez dit "chaque élément dans a est l'élément correspondant dans b", est-ce vrai pour [1,2]> [3,4] = Vrai? –

Répondre

10

Utilisation zip:

len(a) == len(b) and all(j > i for i, j in zip(a, b)) 
1

Je ne sais pas exactement ce que vous cherchez depuis le résultat affiché dans votre exemple semble contredire ce que vous avez dit que vous vouliez retourné, ni ne vous indiquer ce qui est souhaité si la longueur des deux listes est inégale ou si les deux sont vides.

Pour ces raisons, ma réponse traite explicitement la plupart de ces conditions afin que vous puissiez facilement le modifier en fonction de vos besoins. J'ai également fait de la comparaison une fonction de prédicat, donc cela peut aussi être modifié. Notez en particulier les trois derniers cas de test.

BTW, la réponse de Mike Axiak si très bien si toutes ses hypothèses implicites étaient correctes.

def compare_all(pred, a, b): 
    """return True if pred() is True when applied to each 
     element in 'a' and its corresponding element in 'b'""" 

    def maxlen(a, b): # local function 
     maxlen.value = max(len(a), len(b)) 
     return maxlen.value 

    if maxlen(a, b): # one or both sequences are non-empty 
     for i in range(maxlen.value): 
      try: 
       if not pred(a[i], b[i]): 
        return False 
      except IndexError: # unequal sequence lengths 
       if len(a) > len(b): 
        return False # second sequence is shorter than first 
       else:    
        return True # first sequence is shorter than second 
     else: 
      return True # pred() was True for all elements in both 
         # of the non-empty equal-length sequences 
    else: # both sequences were empty 
     return False 

print compare_all(lambda x,y: x>y, [1,2], [3,4]) # False 
print compare_all(lambda x,y: x>y, [3,4], [1,2]) # True 
print compare_all(lambda x,y: x>y, [3,4], [1,2,3]) # True 
print compare_all(lambda x,y: x>y, [3,4,5], [1,2]) # False 
print compare_all(lambda x,y: x>y, [], [])   # False