Чтобы оценить функцию f
по всем парам из двух списков l1
и l2
, используйте Outer
:
In[1]:= Outer[f, {a,b}, {x,y,z}]
Out[1]:= {{f[a,x],f[a,y],f[a,z]}, {f[b,x],f[b,y],f[b,z]}}
Outer
по умолчанию работает на самом низком уровне из предоставленных списков; Вы также можете указать уровень с дополнительным аргументом:
In[2]:= Outer[f, {{1, 2}, {3, 4}}, {{a, b}, {c, d}}, 1]
Out[2]:= {{f[{1,2},{a,b}], f[{1,2},{c,d}]}, {f[{3,4},{a,b}], f[{3,4},{c,d}]}}
Обратите внимание, что это создает вложенный список; Вы можете Flatten
, если хотите.
Мой первоначальный ответ указывал на Thread
и MapThread
, которые представляют собой два способа применения функции к соответствующим парам из списков, например, MapThread[f,{a,b},{1,2}] == {f[a,1], f[b,2]}
.
P.S. Я думаю, что, изучая эти вещи, вы найдете документацию очень полезной. Существует множество общих тематических страниц, например, применение функций к спискам и манипулирование списками . Они обычно связаны с разделом «подробнее» в нижней части конкретной документации. Это значительно облегчает поиск вещей, когда вы не знаете, как они будут называться.