Select 案例选择 请考虑: Subsets[Flatten[ParallelTable[{i, j}, {i, 1, 96}, {j, 1, 4}], 1], {4}]

Select 案例选择 请考虑: Subsets[Flatten[ParallelTable[{i, j}, {i, 1, 96}, {j, 1, 4}], 1], {4}],select,wolfram-mathematica,design-patterns,case,Select,Wolfram Mathematica,Design Patterns,Case,我需要选择所有的子列表,这样每个4的子列表中的I值永远不会相同 {3,1}、{4,1}、{5,1}、{6,1}应被接受,而{1,1}、{1,2}、{2,3}、{6,1}应被拒绝。i的值1重复2次 我知道我可以用Cases来做这件事,但我不理解它的语法,并且发现Cases上的帮助与它的潜在应用程序相比是空的。假设您的数据在变量data中,下面应该可以做到这一点: Select[data, Length@Union[#[[All, 1]]] === 4 &] 这将获取“i”值(即第一个元素

我需要选择所有的子列表,这样每个4的子列表中的I值永远不会相同

{3,1}、{4,1}、{5,1}、{6,1}应被接受,而{1,1}、{1,2}、{2,3}、{6,1}应被拒绝。i的值1重复2次


我知道我可以用Cases来做这件事,但我不理解它的语法,并且发现Cases上的帮助与它的潜在应用程序相比是空的。

假设您的数据在变量
data
中,下面应该可以做到这一点:

Select[data, Length@Union[#[[All, 1]]] === 4 &]

这将获取“
i
”值(即第一个元素),并检查4个值是否都不同(即,如果我们删除了重复项,我们仍然有4个值)

此响应假设输入数据是一个四对元组的列表,例如:

$data = {{{3, 1}, {4, 1}, {5, 1}, {6, 1}} , {{1, 1}, {1, 2}, {2, 3}, {6, 1}}};
使用
Cases
,可以命名和比较每对的第一个元素,以确保它们不相等:

Cases[
  $data
, {{a_, _}, {b_, _}, {c_, _}, {d_, _}} /; Unequal[a, b, c, d]
]
Cases
的另一种用法是比较每对的第一个元素,而不命名它们:

Cases[
  $data
, tuple_ /; Unequal @@ tuple[[All, 1]]
]
或者,可以使用
DeleteCases
并排除至少有两对具有相同初始值的元组:

DeleteCases[
  $data
, {___, {a_, _}, ___, {a_, _}, ___}
]
有人可能会认为最后一个表达可能是:

(* warning: does not work *)
Cases[$data, Except[{___, {a_, _}, ___, {a_, _}, ___}]]

。。。但是
Except
不允许在第一个参数中使用命名模式。

已经涵盖了
案例,所以这里是另一种方法

Pick[data, Signature /@ data[[All, All, 1]], 1 | -1]

它比大多数其他方法都快,但仍然没有固定长度的
Cases
方法快。

您的表是{{{a,b},{c,d}….}而不是{{{a,b},{c,d},{e,f},{gh},},@belisarius,经过编辑,谢谢!@belisarius,实际上它不允许我做元组[…,4]:(您有什么建议:)?:D…我在等你的问题…:Dahaha,子集有效,但似乎想吃掉我的机器!非常感谢。我认为这应该在MMA的案例帮助文件中!@先生,我正在努力为这一代人制定我的问题。你会如何命名我试图构建的过程?你认为有什么方法可以聚合这些问题吗2个问题?可能是在约束条件下生成的?很抱歉,但我在这里的理解非常有限!感谢您的关注!@500我大大高估了您可以节省的内存,因此可能不值得麻烦。但是一个好的实现可能比创建和筛选方法更快。如果您选择发布e问题,我怀疑我能给它起个比你更好的名字。当然,如果发现标题令人困惑,可以在以后编辑。