3 回答
TA贡献1818条经验 获得超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条经验 获得超8个赞
我建议您直接转换为所需的格式,而不是使用与原始输入具有完全相同信息的中间表示形式。让我们想想如何用语言来做到这一点:
查找
1
输入字符串中的第一个将索引添加到列表中
查找
0
字符串中的下一个。将比找到的索引少的一个添加到列表中。(或者可以将步骤 2 和 4 中的索引作为一对附加?)
继续查找下一个
1
并重复步骤 2-4。
我将其翻译成代码作为读者的练习。
TA贡献1828条经验 获得超4个赞
这也可以在理解中使用itertools.groupby, operator.itemgetter,来实现: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,以便将其用作键。
添加回答
举报