Вот ответ Counter
для простейшего случая.
Это короче, чем выше, чем двухсторонний, потому что он точно выполняет именно то, что задает вопрос: сгенерируйте список того, что находится в первый список, но не второй.
from collections import Counter
lst1 = ['One', 'Two', 'Three', 'Four']
lst2 = ['One', 'Two']
c1 = Counter(lst1)
c2 = Counter(lst2)
diff = list((c1 - c2).elements())
В качестве альтернативы, в зависимости от ваших предпочтений читаемости, он делает достойный однострочный:
diff = list((Counter(lst1) - Counter(lst2)).elements())
Выход:
['Three', 'Four']
Обратите внимание, что вы можете удалить вызов list(...)
, если вы просто выполняете итерацию по нему.
Поскольку это решение использует счетчики, оно обрабатывает величины должным образом vs многие ответы на основе набора. Например, на этом входе:
lst1 = ['One', 'Two', 'Two', 'Two', 'Three', 'Three', 'Four']
lst2 = ['One', 'Two']
Выход:
['Two', 'Two', 'Three', 'Three', 'Four']
Добавление элементов матрицы перевода не эквивалентно умножению на соответствующую матрицу перевода, последняя является правильным способом применения перевода.
Объяснение
[Матрица вращения R
, сдвиг переноса t
- матрица T
, точка модели p
.]
Непосредственное добавление матрицы перевода T
эквивалентно предварительному умножению на нее , что означает, что смещение добавляется к выходной точке:
p --> R*p + t
( = T*R*p )
Таким образом, конечная точка: [ 1121]
p' = R*p - t + t = R*p
( = T*inv(T)*R )
Матрица перевода и ее обратная (смещенная на -t
) компенсируют друг друга, и вы получаете эффективный поворот относительно начала координат.
С другой стороны, постмножение на матрицу перевода эквивалентно предварительному применению перевода:
p --> R*(p - t)
( = R*inv(T)*p )
Таким образом, правильная конечная точка:
[ 113] Обратите внимание, что эффективное смещение не отменяется, потому что T
и inv(T)
не находятся рядом друг с другом в выражении.
Правильный код
model_final = tempModel1 * model * tempModel2;
// T * R * inv(T)
(Или используя любую из функций вашей библиотеки, которая умножает матрицы «традиционным» способом, как указано выше)