# Calculating Ranges of Non-Consecutive List

111
2
10-27-2022 09:27 AM New Contributor

I have a script that needs to calculate the location numbers within a page and provide the ranges in a formatted list that will be used to fill out a text field to be used with dynamic text. There are often locations missing, so the list won't be consecutive. Right now I have the code below which accomplishes that, but if there is a single non consecutive location it lists it as a range itself i.e. 5-5. Is there a way to edit the script to prevent this?

loc_numbers = [row for row in arcpy.da.SearchCursor(join_lyr, "Map_ID")]

ranges = sum((list(t) for t in zip(loc_numbers, loc_numbers[1:]) if t+1 != t), [])
iranges = iter(loc_numbers[0:1] + ranges + loc_numbers[-1:])
range_values = ', '.join([str(n) + '-' + str(next(iranges)) for n in iranges])

Tags (4)
1 Solution

Accepted Solutions Occasional Contributor III

Here is a very inelegant way to do it - add this after your code

``fixed_range_values = ', '.join([r if r.split('-') != r.split('-') else r.split('-') for r in range_values.replace(' ','').split(',')])``

2 Replies Occasional Contributor III

Here is a very inelegant way to do it - add this after your code

``fixed_range_values = ', '.join([r if r.split('-') != r.split('-') else r.split('-') for r in range_values.replace(' ','').split(',')])`` New Contributor

That worked, thank you! 