Как пересечь два горизонтальных списка с помощью Python?

1

В коде, который я пишу, мне нужно пересечь два горизонтальных списка, например:

lišta:

chr1    aatt
chr8    tagg
chr11   aaaa
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

Как получить перекресток между этими двумя списками?

желаемый результат:

chr7    gtag
chr11   aaaa

Я также могу создать списки из двух строк в строке, например:\

lišta:

('chr1', 'aatt')
('chr8', 'tagg')
('chr11', 'aaaa')
('chr7', 'gtag')

LISTB

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

Важным моментом в этом случае является то, что два столбца должны рассматриваться как один

спасибо за ваше время!

Теги:
list
intersection

5 ответов

4
Лучший ответ

Использовать Python устанавливает

listA = (
    ('chr1', 'aatt'),
    ('chr8', 'tagg'),
    ('chr11', 'aaaa'),
    ('chr7', 'gtag'),
)

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

combined = set(listA).intersection(set(listB))
for c, d in combined:
    print c, d

Вы также можете использовать & следующим образом:

combined = set(listA) & set(listB)
5

Преобразование в множество и пересечение: set(a) & set(b)

2

Используйте пересечение множества.

setC = set(listA) & set(listB)
listC = list(setC) # if you really need a list
  • 2
    Вы видели два одинаковых ответа выше?
  • 0
    Технически этот ответ является наиболее правильным из трех, потому что он возвращает список.
Показать ещё 1 комментарий
1

импортировать numpy как np

np.intersect_nu(list1, list2)
0

Возможно, есть оптимизация производительности, не создавая 2 набора из списков, что требует хэширования всех элементов в списке, но создание только 1 набора и повторение по второму списку. Если вы знаете, какой список большой и который небольшой, что также может помочь.

def intersect(smallList, largeList):
    values = set(smallList)
    intersection = []

    for v in largeList:
        if v in values:
            intersection.append(v)

    return intersection

Ещё вопросы

Сообщество Overcoder
Наверх
Меню