Почему реверсивный список повторяет функцию? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь найти, где ломаная пересекает полиномы. Мои полиномы хранятся в GeoPandasFrame. Это сделано без проблем, но поскольку функция фигурных пересечений сортирует результаты, я проверяю точку начала координат, используя опцию Geo pandas includes. И вот проблема: когда я переворачиваю список вывода, моя функция начинает выполнять итерации. Пожалуйста, объясните, почему и как решить.

Мой код:

def TaxZoneCross(tz, pl):
' function returns the Tax Zones order numbers which being crossed'

print('starting cross')
cross = [ii for ii, poly in zip(tz.index, tz.geometry) if pl.crosses(poly)[1]]

'check if should be reversed'
#set_trace()
cr_first = tax_zones.contains(Point(pl.geometry[0].coords[0]))
print(cr_first)
#if cr_first[cr_first].index.tolist()[0] != cross[0]:
    #cross.reverse()
crs = cross
return crs

Результат:


  0%|                                                                                            | 0/3 [00:00<?, ?it/s]
starting cross
[1, 7]

 67%|████████████████████████████████████████████████████████                            | 2/3 [00:01<00:00,  1.94it/s]
starting cross
[1, 2]

100%|████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:02<00:00,  1.38it/s]
starting cross
[1, 2, 7]
HOORAY
100%|████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:03<00:00,  1.02s/it]][1]

Но как только я добавлю условное условие с Reverse ot [::-1] , Я получаю функцию зацикливания:

def TaxZoneCross(tz, pl):
' function returns the Tax Zones order numbers which being crossed'

print('starting cross')
cross = [ii for ii, poly in zip(tz.index, tz.geometry) if pl.crosses(poly)[1]]

'check if should be reversed'
#set_trace()
cr_first = tax_zones.contains(Point(pl.geometry[0].coords[0]))
#print(cr_first)
if cr_first[cr_first].index.tolist()[0] != cross[0]:
    cross.reverse()
crs = cross
return crs

Результат:

    0%|                                                                                            | 0/3 [00:00<?, ?it/s]
starting cross
[1, 7]
HOORAY

 67%|████████████████████████████████████████████████████████                            | 2/3 [00:00<00:00,  2.18it/s]
starting cross
[1, 2]
HOORAY

100%|████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00,  1.73it/s]
starting cross
[7, 2, 1]
HOORAY
starting cross
[1, 7]
HOORAY
starting cross
[1, 2]
HOORAY
starting cross
[7, 2, 1]
HOORAY
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-46-85cfbf7694cf> in <module>()
      1 tqdm.pandas()
----> 2 result = route.progress_apply(lambda row: Main(row, tax_zones), axis = 1)
      3 
      4 iterables = [['tz_0', 'tz_1', 'tz_2', 'tz_3', 'tz_4', 'tz_5', 'tz_6', 'tz_7'], 
      5              ['distance.text', 'distance.value', 'duration.text', 'duration.value', 'end_address',

c:\users\vnemanov106591\documents\python_3.6\lib\site-packages\tqdm\std.py in inner(df, func, *args, **kwargs)
    751                 # Apply the provided function (in **kwargs)
    752                 # on the df using our wrapper (which provides bar updating)
--> 753                 result = getattr(df, df_function)(wrapper, **kwargs)
    754 
    755                 # Close bar and return pandas calculation result
...