, простирающихся от этого question, мне нужно максимально быстро решения этой проблемы:быстрый способу сравнить массивы
Учитывая следующее:
m=['abc','bcd','cde','def']
r=[['abc','def'],['bcd','cde'],['abc','def','bcd']]
Я хотел бы изменить эти объекты (или произведен новые объекты), так что для каждого элемента в списке m, если он существует менее чем в 2 раза по всем спискам r, элемент удаляется из m, а также из того места, где он встречается в r.
Таким образом, результат выше будет выглядеть следующим образом:
['abc','bcd','def']
... потому что «CDE» встречается только один раз в г.
Еще лучше было бы это:
[2, 2, 1, 2]
... или подсчет частот элементов в м через списки в р. Затем, исходя из числа, я мог бы редактировать списки в r на основе индекса вывода, если значение соответствует определенным критериям.
Так, например, удалите индекс i каждого списка по r, если i < 2 или> 100.
Существует круглый о способ сделать это, но медленнее, чем мелассы в январе:
Моя точка является то, что это:
[[1 if mx in rx else 0 for mx in m] for rx in map(set, r)]
будет производить это:
[[1, 0, 0, 1], [0, 1, 1, 0], [1, 1, 0, 1]]
Заранее благодарим!
на "удалить из' M' и везде в 'r'" кажется, что вы хотите, чтобы он был извлечен для другого использования - правильно? кажется важным различием. –
Вместо того, чтобы зависеть от абсолютного самого быстрого метода, от верхней части моей головы я бы сгладил список 'r', сортировал сплющенный список, затем подсчитывал количество последовательных идентичных записей и поиск' m', чтобы найти, если вы сохранить запись или нет. –
@Tadhg McDonald-Jensen - Да, это важно. Мне не нужны элементы после их удаления. –