2011-06-03 25 views
3
  • 第一部分子列表元素:ACCESS

与提供:访问和选择特定使用纯函数

list = {{z, x, c, d}, {1, 2, 3, 4}} 

我想做到以下几点:

(#3/2 + #1/3) &[list[[1]]] 

可惜这种情况导致:

enter image description here

虽然我所需的输出是:

(#3/2 + #1/3) &[z, x, c, d] 

enter image description here

与获得

  • 第二部分:条件选择

试图做到这一点:

Select[list[[2]], # > 2 &] 

我怎么能指定与#如果可能的子表?

回答礼貌列昂尼德(在下方留言,详细介绍):

Select[#[[2]], # > 2 &] &[list] 

回答

5

你几乎有:

(#[[3]]/2 + #[[1]]/3) &[list[[1]]] 

#1是一个函数的第一个参数, #3是第三位。您只提供 一个参数,即列表[[1]]。由于列表[[1]]是一个列表,它在您的函数上映射为 。 #[[1]]和#[[3]]指定第一个参数的第一个和第三个部分/元素。

3

您可以使用Sequence(#3/2 + #1/3) &[Sequence @@ (list[[1]])]做你想做的。 Sequence可能非常有用

+8

@ 500,@acl也可以使用'Apply':'( #3/2 +#1/3)&@@ list [[1]]'。 – 2011-06-03 11:39:29

+0

@acl,@Leonid,谢谢。问题标题现在用得更好了吗? – 500 2011-06-03 11:51:12

+1

@ 500我会称之为“纯函数来访问嵌套列表中的特定子列表元素”或类似的东西。 – 2011-06-03 12:07:57

3

对于第一个,你只需要Apply(简称@@):

#3/2 + #1/3 & @@ list[[1]] 
+1

我在@acl – 2011-06-03 17:40:18

+0

@Leonid的回答评论中提到了这一点@Leonid,这很简单:在阅读“答复,Leonid礼貌(详见下面的评论)”之后,我在下面找了评论,而我没有看到任何,我发现混淆!我想这可能是一个小故障。尽管如此,我认为这种方法值得自己回答。您的评论+1,另一个更接近您的银色评论家徽章。 – 2011-06-03 17:53:28

+0

“我认为这种方法值得自己回答” - 我不反对,所以+1。 – 2011-06-03 18:03:05