我需要將ints列表轉換爲包含列表中所有範圍的字符串。 因此,例如,輸出應該是如下:整數列表到範圍
getIntRangesFromList([1,3,7,2,11,8,9,11,12,15]) -> "1-3,7-9,11-12,15"
所以輸入未排序並且可以有重複的值。這些列表的大小範圍從一個元素到4k個元素。最小值和最大值分別爲1和4094.
這是性能關鍵代碼片的一部分。我一直在試圖優化這一點,但我找不到一種更快的方法。這是我現在的代碼:
def _getIntRangesFromList(list):
if (list==[]):
return ''
list.sort()
ranges = [[list[0],list[0]]] # ranges contains the start and end values of each range found
for val in list:
r = ranges[-1]
if val==r[1]+1:
r[1] = val
elif val>r[1]+1:
ranges.append([val,val])
return ",".join(["-".join([str(y) for y in x]) if x[0]!=x[1] else str(x[0]) for x in ranges])
關於如何更快地獲得這個的任何想法?
屬於http://codereview.stackexchange.com/如果它工作 – depperm
看起來是線性時間,假設'join()'在內部實現也是線性時間。你可能能夠減少常數因子(例如用C編碼),但是沒有什麼東西可以漸近地變快。 –
對我來說大概需要0.000006秒。這還不夠好?它需要多快? –