У меня есть два списка, как THW следующие:общие элементы в двух списках, где элементы являются одинаковыми
a=['not','not','not','not']
b=['not','not']
, и я должен найти len
списка, содержащего intesection из двух выше списка, так что результат:
intersection=['not','not']
len(intersection)
2
Теперь проблема заключается в том, что я пытался filter(lambda x: x in a,b)
и filter (lambda x: x in b,a)
, но когда один из два списка больше, чем другие, я не получаю пересечение, но только проверку членства. В приведенном выше примере, поскольку все члены a находятся в b, я получаю len общих элементов из 4; то, что я вместо этого хочу, является пересечением, которое является len
2. Вместо этого вместо этого будет создан набор, который не является тем, что я хочу, поскольку все элементы одинаковы. Можете ли вы предложить мне какое-нибудь ценное и компактное решение проблемы?
Я думаю, что 'Counter' может быть полезно здесь, но OP хочет 2, а не 6, как результат. Я думал о чем-то более похожем на '(Counter (a) & Counter (b)) [" not "]'. (Или сумма ((счетчик (a) и счетчик (b)). Values ()), если мы не хотим жестко кодировать слово.) – DSM
oh oops! Я сделаю редактирование – ersran9
@DSM 'sum ((Counter (a) & Counter (b)). Values ())' будет ломаться, если у них более одного слова, не так ли? – ersran9