У меня есть четыре списка, представляющие координаты X и Y разных точек в списках A и B, поэтому 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 равные 'k' координаты из координат B и 'e' удовлетворяют пределу погрешности и, следовательно, приблизительно равны координатам 'm':
Node_A: ['a', 'e']
Node_B: ['k', 'm']
Вместо этого я получаю Node_A: ['c'] и Node_B: ['l']
Вы сделали опечатку во втором условии.
Это дает вам: e, k: m:
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
+ Изменить
if abs(lo1 - lo2) <= error and abs(la1 == la2) <= error:
в
if abs(lo1 - lo2) <= error and abs(la1 - la2) <= error:
Результат:
['a', 'e']
['k', 'm']