¿Cómo intersecar un rango de columnas entre dos listas horizontales?

En el código que estoy escribiendo, necesito cruzar dos listas horizontales como:

listA:

('name1','chr1', 'aatt')
('name2','chr11', 'aaga')
('name2','chr11', 'aaaa')
('name3','chr7', 'gtag')

listB

('chr8', 'tagt')
('chr1', 'tttt')
('chr7', 'gtag')
('chr11','aaaa')
('chr9', 'atat')

#This lists are compounded by one str per line, wich it has a "/t" in the middle. 
#Also note that are in different order

¿Cómo puedo obtener las líneas de la lista A cuyas columnas 2 y 3 se cruzan con la lista B?

resultado deseado:

name2   chr11   aaaa
name3   chr7    gtag

La solución no es solo "set (listA) & set (listB)" porque la lista tiene un número diferente de columnas

¡gracias por tu tiempo!

preguntado el 16 de mayo de 11 a las 17:05

1 Respuestas

set_b = set(list_b)
result = [x for x in list_a if (x[1], x[2]) in set_b]

contestado el 16 de mayo de 11 a las 22:05

luego para imprimir el resultado como quiero ... para c1, c2, c3 en el resultado: imprimir c1, c2, c3 ... ¿estoy en lo cierto? - Geparada

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.