Comparando dos listas en Python (casi lo mismo)

Tengo dos listas con valores en el ejemplo:

List 1 = TK123,TK221,TK132 

Y

 List 2 = TK123A,TK1124B,TK221L,TK132P 

Lo que quiero hacer es obtener otra matriz con todos los valores que coincidan entre la Lista 1 y la Lista 2 y luego generar los que no coincidan.

Para mis propósitos, se considera que “TK123” y “TK123A” coinciden. Entonces, de las listas de arriba, obtendría solo TK1124B .

No me importa especialmente la velocidad, ya que planeo ejecutar este progtwig una vez y terminar con él.

Esto compara cada elemento de la lista con cada elemento de la otra lista. Esto no funcionará si ambos tienen letras (por ejemplo, TK132C y TK132P no coincidirían). Si eso es un problema, comenta abajo.

 list_1 = ['TK123','TK221','TK132'] list_2 = ['TK123A','TK1124B','TK221L','TK132P'] ans = [] for itm1 in list_1: for itm2 in list_2: if itm1 in itm2: break if itm2 in itm1: break else: ans.append(itm1) for itm2 in list_2: for itm1 in list_1: if itm1 in itm2: break if itm2 in itm1: break else: ans.append(itm2) print ans >>> ['TK1124B'] 
 >>> list1 = 'TK123','TK221','TK132' >>> list2 = 'TK123A','TK1124B','TK221L','TK132P' >>> def remove_trailing_letter(s): ... return s[:-1] if s[-1].isalpha() else s ... >>> diff = set(map(remove_trailing_letter, list2)).difference(list1) >>> diff set(['TK1124']) 

Y puedes volver a añadir la última letra,

 >>> add_last_letter_back = {remove_trailing_letter(ele):ele for ele in list2} >>> diff = [add_last_letter_back[ele] for ele in diff] >>> diff ['TK1124B'] 

Por:

 list_1 = ['TK123', 'TK221', 'TK132'] list_2 = ['TK123A', 'TK1124B', 'TK221L', 'TK132P'] 

Cualquiera de los dos fragmentos siguientes generará una lista de elementos comunes entre dos listas:

 list(set(list_1).intersection(list_2)) # returns [] list(set(list_1) & set(list_2)) # returns [] 

Para obtener una lista de artículos exclusivos:

 list(set(list_1) ^ set(list_2)) # returns ['TK1124B', 'TK132P', 'TK123A', 'TK221', 'TK221L', 'TK132', 'TK123'] 

Si desea ordenar la lista resultante, use el método sorted :

 exclusive = list(set(list_1) ^ set(list_2)) sorted(exclusive) # returns ['TK1124B', 'TK123', 'TK123A', 'TK132', 'TK132P', 'TK221', 'TK221L']