Comparando listas en Python

Digamos que tengo list1 = [1,2,3,4] y list2 = [5,6,7,8] . ¿Cómo compararía el primer elemento, 1 , en la list1 con el primer elemento, 5 , en la list2 ? Y 2 con 6 , 3 con 7 , y así sucesivamente.

Estoy tratando de usar un bucle for para esto, pero no estoy seguro de cómo hacerlo. Entiendo que hacer for x in list1 solo verifica un elemento x para todos los elementos en la lista1, pero no sé cómo hacerlo al comparar dos listas de la forma que describí.

Puedes atravesar ambas listas simultáneamente usando zip:

 for (x, y) in zip(list1, list2): do_something 

La función ‘zip’ te da [(1,5), (2,6), (3,7), (4,8)] , por lo que en la iteración del bucle N obtienes el elemento Nth de cada lista.

Los operadores de comparación por defecto comparan listas en orden lexicográfico. Así que puedes decir cosas como:

 >>> [1, 2, 3, 4] < [5, 6, 7, 8] True 

Si, por el contrario, desea calcular la comparación elemental, puede usar map y cmp (o cualquier otro operador:

 >>> map(cmp, [1, 2, 3, 4], [5, 6, 7, 8]) [-1, -1, -1, -1] 

Si su resultado será una nueva lista, entonces puede usar una lista de comprensión:

 new_list = [ some_function(i, j) for i, j in zip(list1, list2) ] 

Aquí hay un ejemplo real del código anterior:

 >>> list1 = [1, 2, 3, 4] >>> list2 = [1, 3, 4, 4] >>> like_nums = [ i == j for i, j in zip(list1, list2) ] >>> print like_nums [True, False, False, True] 

Esto hará una lista de bools que muestran si los elementos del mismo índice en dos listas son iguales entre sí.

Además, si usa la función zip, hay una manera de descomprimir el resultado cuando haya terminado de operar en él. Así es cómo:

 >>> list1 = [1, 2, 3, 4] >>> list2 = [1, 3, 4, 4] >>> new_list = zip(list1, list2) # zip >>> print new_list [(1, 1), (2, 3), (3, 4), (4, 4)] >>> newlist1, newlist2 = zip(*new_list) # unzip >>> print list(newlist1) [1, 2, 3, 4] >>> print list(newlist2) [1, 3, 4, 5] 

Esto podría ser útil si necesita modificar las listas originales, al mismo tiempo que compara los elementos del mismo índice de alguna manera.