我有一系列由等分点定义的行:
{{{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]]
......但它不起作用。救命啊!
答案 0 :(得分: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(或您最熟悉的任何命令式编程语言)。
答案 1 :(得分: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]
]
]