Доступ и выбор определенных элементов подсписка с помощью функции Pure - PullRequest
3 голосов
/ 03 июня 2011
  • Часть I: ДОСТУП

Предоставляется:

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

Я бы хотел сделать следующее:

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

Что, к сожалению, приводит к:

enter image description here

Хотя мой желаемый результат будет:

enter image description here

получено с:

 (#3/2 + #1/3) &[z, x, c, d]
  • Часть II: УСЛОВНЫЕ ВЫБОРЫ

Попытка сделать это:

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

Как я могу указать подсписок с #, если это возможно?

Ответ , любезно предоставлено Леонид (подробно в комментарии ниже):

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

Ответы [ 4 ]

5 голосов
/ 03 июня 2011

Вы были почти там:

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

# 1 - первый аргумент функции, а # 3 - третий.Вы предоставляете только один аргумент, а именно list [[1]].Поскольку list [[1]] является списком, он отображается в вашей функции.# [[1]] и # [[3]] определяют первую и третью часть / элемент первого аргумента.

3 голосов
/ 03 июня 2011

Для первого вам просто нужно Apply (краткая форма @@):

#3/2 + #1/3 & @@ list[[1]]
3 голосов
/ 03 июня 2011

Иногда может оказаться полезным использовать некоторые обозначения для улучшения читабельности.Например, уточняя ответ Маркуса:

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 голосов
/ 03 июня 2011

Вы можете использовать Sequence: (#3/2 + #1/3) &[Sequence @@ (list[[1]])] делает то, что вы хотите.Sequence может быть очень полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...