提供:
list = {{z, x, c, d}, {1, 2, 3, 4}}
我想做以下事情:
(#3/2 + #1/3) &[list[[1]]]
遗憾地导致:
虽然我想要的输出是:
获得:
(#3/2 + #1/3) &[z, x, c, d]
尝试这样做:
Select[list[[2]], # > 2 &]
如果可能的话,如何用#指定子列表?
回答,由 Leonid 提供(详见下方评论):
Select[#[[2]], # > 2 &] &[list]
答案 0 :(得分:5)
你快到了那里:
(#[[3]]/2 + #[[1]]/3) &[list[[1]]]
#1是函数的第一个参数,#3是第三个参数。你只提供 一个参数,即列表[[1]]。由于列表[[1]]是一个列表,因此它被映射 超过你的功能。 #[[1]]和#[[3]]指定第一个参数的第一个和第三个/元素。
答案 1 :(得分:3)
您可以使用Sequence
:(#3/2 + #1/3) &[Sequence @@ (list[[1]])]
做您想做的事。 Sequence
可能非常有用
答案 2 :(得分:3)
有时您可能会发现使用某种符号来提高可读性是有用的。例如,详细阐述马库斯的回答:
list = {{z, x, c, d}, {1, 2, 3, 4}}
third[x_List] := x[[3]];
third@#/2 + First@#/3 &@ First@list
(*
-> c/2+z/3
*)
答案 3 :(得分:3)
首先,您需要Apply
(简称@@
):
#3/2 + #1/3 & @@ list[[1]]