Список почти в списке списков Pyhton - PullRequest
0 голосов
/ 30 марта 2020

У меня есть список списков в python, где в моем случае списки являются координатами. Я хочу добавить новые координаты в этот список, но только если координата еще не существует. Это легко выполнимо следующим образом.

List = [coord1,coord2,...,coordn]
coord = [x,y,z]
if not coord in List: List.append(coord) 

Проблема в том, что эти координаты генерируются со всеми видами функций goniometri c, поэтому они являются числами с плавающей точкой, и может возникнуть следующий минимальный пример:

List =[[0,0],[1,0]]
coords = [0.99999999999,0.000000000001]

Я не хочу добавлять новую координату, поэтому мне было интересно, существует ли какой-нибудь простой способ проверить, существует ли простая функция func, которая будет выполнять что-то вроде следующего :

List =[[0,0],[1,0]]
coord = [0.99999999999,0.000000000001]
tol = 1e-10 
func(coord,List,tol) = True

т.е. func возвращает True, если в Списке существует координата c, например, ||c-coord||<tol. Одно из ограничений, что List остается списком, поэтому предпочтительнее, если его не нужно преобразовывать в массив numpy, но использование numpy в общем случае возможно, и я думаю, что это необходимо.

1 Ответ

0 голосов
/ 30 марта 2020

это распространенная проблема, которая может быть решена путем округления значения с плавающей запятой:

coord = [0.99999999999,0.000000000001]
rounded_coord = [ '%.2f' % elem for elem in coord ]

это должно вернуть список с округленными значениями с плавающей запятой, но они будут иметь тип String. для работы с данными, вероятно, лучше снова преобразовать строки в числа с плавающей точкой, изменив код:

rounded_coord = [ float('%.2f' % elem) for elem in coord ]
...