Выберите подсписок, если элемент присутствует во втором списке - PullRequest
0 голосов
/ 13 марта 2019

У меня есть два списка:

A = [['67', '75', 'X'], ['85','72', 'V'], ['1','2', 'Y'],  ['3','5', 'X', 'Y']]
B = ['X', 'Y']

Я хочу создать третий список, C, который имеет подсписки A, элементы которых определены в B (и / или).

C = [[67', '75', 'X'],['1','2', 'Y'],  ['3','5', 'X', 'Y']]

Я пробовал:

C = [i for i in B if i in A]

Но это не сработало, я получил пустой список Си. Пожалуйста, дайте мне знать, как лучше всего получить C.

Ответы [ 4 ]

2 голосов
/ 13 марта 2019

Используйте списочное понимание, которое проверяет, находится ли какой-либо из элементов в B в A:

A = [['67', '75', 'X'], ['85','72', 'V'], ['1','2', 'Y'], ['3','5', 'X', 'Y']]
B = ['X', 'Y']

C = [x for x in A if any(y in x for y in B)]
# [['67', '75', 'X'], ['1', '2', 'Y'], ['3', '5', 'X', 'Y']]
0 голосов
/ 14 марта 2019

Вы также можете использовать установить пересечение , чтобы проверить, есть ли какой-либо общий элемент между e (подсписком) элементов A и b, определенным как set(B).

Итак,

b = set(B)
C = [ e for e in A if b.intersection(set(e)) ]

#=> [['67', '75', 'X'], ['1', '2', 'Y'], ['3', '5', 'X', 'Y']]
0 голосов
/ 13 марта 2019

Вы также можете использовать это:

C = list()
for i in A:
    if B[0] in i or B[1] in i:
        C.append(i)
0 голосов
/ 13 марта 2019
C = [y for y in A for x in B if x in y]

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...