Я пытаюсь проверить, находятся ли узлы в объеме сферы и добавляет идентификатор узла в список. Однако эффективность алгоритма невероятно медленная, и я не уверен, как ее улучшить.Оптимизированное сравнение Python между списком Dict
У меня есть два списка. Список A имеет формат [{'num': ID, 'x': VALUE, 'y': VALUE, 'z': VALUE], тогда как список B имеет формат [{'x': VALUE, 'y ': VALUE,' z ': VALUE,' rad ': VALUE}].
Размер обоих списков может превышать 100 000 предметов каждый.
Мой текущий код опубликован ниже, но он очень неэффективен.
filteredList = []
for i in range(len(sList)):
minx = (sList[i]['x']) - (sList[i]['radius'])
maxx = (sList[i]['x']) + (sList[i]['radius'])
miny = (sList[i]['y']) - (sList[i]['radius'])
maxy = (sList[i]['y']) + (sList[i]['radius'])
minz = (sList[i]['z']) - (sList[i]['radius'])
maxz = (sList[i]['z']) + (sList[i]['radius'])
for j in range(len(nList)):
if minx <= nList[j]['x'] <= maxx:
if miny <= nList[j]['y'] <= maxy:
if minz <= nList[j]['z'] <= maxz:
tmpRad = findRadius(sList[i],nList[j])
if tmpRad <= sList[i]['radius']:
filteredList.append(int(nList[j]['num']))
Я в недоумении и ценю любые идеи.
Редактировать: Добавление дополнительной информации о формате data.
Список А (NLIST) - определяет узлы, с места х, у, z, и идентификатор NUM
[{ 'у': 0,0, 'х': 0,0, 'Num': 1,0 ' z ': 0.0},
{' y ': 0.0,' x ': 1.0,' num ': 2.0,' z ': 0.0},
{' y ': 0.0,' x ': 2.0,' num ': 3.0,' z ': 0.0},
{' y ': 0.0,' x ': 3.0,' num ': 4.0,' z ': 0.0},
{' y ': 0.0,' x ': 4.0,' num ': 5.0,' z ': 0.0},
{' y ': 0.0,' x ': 5.0,' num ': 6.0,' z ': 0.0},
{' y ': 0.0,' x ': 6.0,' num ': 7.0,' z ': 0.0},
{'y': 0.0, 'x': 7.0, 'num': 8.0, 'z': 0.0},
{'y': 0.0, 'x': 8.0, 'num': 9.0, ' г ': 0,0}, {
' у ': 0,0, 'х': 9,0, 'Num': 10,0, 'Z': 0,0}]
список B (SLIST) - определяет сферы, используя x, y, z, радиус
[{'y': 18.0, 'x': 25.0, 'z': 26.0, 'radius': 0,0056470000000000001},
{'y': 29.0, 'x': 23.0 , 'z': 45,0, 'radius': 0,0066280000000000002},
{'y': 46.0, 'x': 29.0, 'z': 13.0, 'radius': 0.014350999999999999},
{'y': 0 , 0, 'x': 20.0, 'z': 25.0, 'radius': 0.014866000000000001},
{'y': 27.0, 'x': 31.0, 'z': 18.0, 'radius': 0.018311999999999998},
{'y': 10.0, 'x': 36.0, 'z': 46.0, 'radius': 0.024702000000000002},
{'y': 27.0, 'x': 13.0, 'z': 48.0, 'radius ': 0.027300999999999999},
{' y ': 14.0,' x ': 1.0,' z ': 13.0,' radius ': 0.033889000000000002},
{' y ': 31.0,' x ': 20.0,' z ': 11.0,' radius ': 0.034118999999999997},
{' y ': 23.0,' x ': 28.0,' z ': 8.0,' radius ': 0.036683}]
Было бы полезно, если бы вы предоставили несколько фактических точек данных для sList и nList, а не описание «Список A» и «Список B». И что означают эти списки? – 2010-11-30 06:28:12
[{'num': ID} {'x': VALUE}, {'y': VALUE}, {'z': VALUE}]: Это правильно?Поскольку, похоже, не все dict имеют ключ x, поэтому sList [i] ['x'] выдаст ошибку. – Kabie 2010-11-30 06:32:03
Да, вероятно, он означал `[{'num': ID, 'x': VALUE, 'y': VALUE, 'z': VALUE}]` – 2010-11-30 06:34:52