【发布时间】:2018-06-14 09:30:30
【问题描述】:
我有四个列表代表列表 A 和 B 中不同点的 X 和 Y 坐标,所以 X_A、Y_A、X_B、Y_B
A ] ['a', 'b', 'c', 'd', 'e', 'f']
X_A = [1.0, 2.2, 3.0, 4.0, 5.001, 6.0]
Y_A = [0.0, 2.0, 4.0, 6.1, 8.0, 0.0]
B = ['k', 'l', 'm', 'n', 'o', 'p']
X_B = [1.0, 3.0, 5.0005, 7.0, 9.1, 11.0]
Y_B = [0.0, 1.0, 8.0, 2.0, 8.0, 0.1]
上面读作'a'有坐标(1.0, 0.0),'l'有坐标(3.0, 1.0)
我想将 A 到 Node_A 列表的项目和 B 到 Node_B 的项目添加到列表 A 和 B 的元素的对应坐标满足误差范围:
(X_A - X_B) <= error and (Y_A - Y_B) <= error
我有以下代码,我认为它应该可以完成这项工作,但它似乎不起作用,我不明白为什么,感谢任何帮助!
Node_A, Node_B = [], []
error = 1e-2
i, j = 0, 0
for lo1,la1 in zip(X_A, Y_A):
for lo2,la2 in zip(X_B, Y_B):
if abs(lo1 - lo2) <= error and abs(la1 == la2) <= error:
Node_A.append(A[i])
Node_B.append(B[j])
break
j += 1
i += 1
j = 0
所需的输出应如下所示,因为它们来自 A 的“a”坐标等于来自 B 的“k”坐标和“e”坐标满足误差范围,因此大约等于“m”坐标:
Node_A: ['a', 'e']
Node_B: ['k', 'm']
相反,我得到 Node_A: ['c'] 和 Node_B: ['l']
【问题讨论】:
-
这不是存储这些数据的好方法。你试过面向对象编程吗?你目前的结果是什么?
-
您的
if中有一个==,应该是一个减号。该代码有效。 -
你确定
abs(la1 == la2),也许这需要abs(la1 - la2)代替? -
我相信你的代码有一些拼写错误,例如
A ] ['a', ...=>A = ['a', ...或定义X_A = [1.0 2.2=>X_A = [1.0, 2.2, ... -
谢谢你,很抱歉浪费你的时间这是一个愚蠢的帖子
标签: python python-3.x list