2

我有一个由点数定义的线数组:

{{{340.754, 681.}, {361.889, 0.}}, {{760.286, 681.}, {775.156,0.}},
 {{398.028, 681.}, {420.73, 0.}}, {{0, 681.}, {239.46, 0.}},
 {{175.78, 681.}, {190.651, 0.}}}

我想删除第一个 x 点等于零的线。尝试过这样的事情:

 For[i = Length[lines], i > 0, i--, 
 If [lines[[i]][[1]][[1]] = 0, Delete[lines, i], 0]]

...但它不工作。帮助!

4

2 回答 2

2

mylist = {{{340.754, 681.}, {361.889, 0.}}, {{760.286, 681.}, {775.156,0.}},
 {{398.028, 681.}, {420.73, 0.}}, {{0, 681.}, {239.46, 0.}},
 {{175.78, 681.}, {190.651, 0.}}};

然后

mylist /. {{0, _}, {_, _}} -> Sequence[]

返回

{{{340.754, 681.}, {361.889, 0.}}, {{760.286, 681.}, {775.156, 
   0.}}, {{398.028, 681.}, {420.73, 0.}}, {{175.78, 681.}, {190.651, 
   0.}}}

如果你想覆盖现有的定义,你可以写

 mylist = mylist /. {{0, _}, {_, _}} -> Sequence[]

如果您发现自己在 Mathematica 中编写循环,特别是对于简单的操作,那么您几乎可以肯定没有有效地使用该语言。尽可能多地忘记 C(或任何您最熟悉的命令式编程语言)。

于 2012-11-09T19:25:51.937 回答
0

Delete不触及原论点。Mathematica 是函数式的,所以对象大多是不可变的。Delete返回修改后的列表,因此你应该这样做

lines=Delete[lines,i]

您也忘记了这=是分配,而不是比较。所以,==用来比较,你的最终代码是

For[
 i = Length[lines], i > 0, i--,
 If[
  lines[[i]][[1]][[1]] == 0, lines = Delete[lines, i]
  ]
 ]
于 2012-11-09T19:17:29.537 回答