从外部列表中过滤内部列表

Filter inner lists from outer lists

例如,如果我有如下列表列表,你如何识别包含所有“0”的内部列表组?

[[0 0 1303] [0 0 0] [0 0 0] [1303 0 0] [0 0 0] [0 1303 0] [0 0 0] [0 0 1303]]

想出如下解决方案。有没有更好更简单的方法? (例如使用地图功能)

let a [[0 0 1303] [0 0 0] [0 0 0] [1303 0 0] [0 0 0] [0 1303 0] [0 0 0] [0 0 1303]] 
foreach a [x -> if (length filter [ i -> i > 0 ] x) = 0 [set a remove x a]] 
show a

您可以使用 filtern-values 来检查筛选的项目是否不等于与其长度相等的零数:

to-report clean [ list_ ]
  report filter [ f -> f != n-values length f [0] ] list_
end

to check
  let all [[0 0 1303] [0 0 0] [0 0 0] [1303 0 0] [0 0 0] [0 1303 0] [0 0 0] [0 0 1303]]

  print clean all

  print clean [ [ 0 ] [ 0 1 ] [ 1 0 ] [ 0 0 ] [ 0 0 0 0 0 0 ] [ 1 0 0 0 ] ]  
end

运行 check 过程后的输出:

[[0 0 1303] [1303 0 0] [0 1303 0] [0 0 1303]]
[[0 1] [1 0] [1 0 0 0]]