3 回答

TA貢獻1818條經(jīng)驗 獲得超7個贊
這是獲取所有間隔的簡單易讀的代碼:
daypart = '1111111111111111111111'
hours= []
start, end = -1, -1
for i in range(len(daypart)):
if daypart[i] == "1":
if end != -1:
end += 1
else:
start = i
end = i
else:
if end!=-1:
hours.append([start, end])
start, end = -1,-1
if end!=-1:
hours.append([start, end])
start, end = -1,-1
print(hours)

TA貢獻1844條經(jīng)驗 獲得超8個贊
我建議您直接轉(zhuǎn)換為所需的格式,而不是使用與原始輸入具有完全相同信息的中間表示形式。讓我們想想如何用語言來做到這一點:
查找
1
輸入字符串中的第一個將索引添加到列表中
查找
0
字符串中的下一個。將比找到的索引少的一個添加到列表中。(或者可以將步驟 2 和 4 中的索引作為一對附加?)
繼續(xù)查找下一個
1
并重復步驟 2-4。
我將其翻譯成代碼作為讀者的練習。

TA貢獻1828條經(jīng)驗 獲得超4個贊
這也可以在理解中使用itertools.groupby, operator.itemgetter,來實現(xiàn):enumerate
from itertools import groupby
from operator import itemgetter
daypart = '110011100111111100011110'
get_ends, get_one = itemgetter(0,-1), itemgetter(1)
output = ', '.join('{0[0]}-{1[0]}'.format(*get_ends(list(g))) for k,g in groupby(enumerate(daypart), get_one) if k=='1')
print(output)
0-1, 4-6, 9-15, 19-22
get_ends獲取每個組中的第一個和最后一個元素,并get_one僅獲取元素1,以便將其用作鍵。
添加回答
舉報