为了账号安全,请及时绑定邮箱和手机立即绑定

如何从列表中提取嵌套在特定元素之间的元素,并将它们添加到新列表中?

如何从列表中提取嵌套在特定元素之间的元素,并将它们添加到新列表中?

慕桂英3389331 2023-12-09 15:59:14
我有一个时段列 (str),其中一天中的每个小时都有 1 或 0,具体取决于我们是否选择在该小时内运行广告活动。例子:daypart = '110011100111111100011110'我想将其转换为以下字符串格式:'0-1, 4-6, 9-15, 19-22'上述格式更具可读性,并显示了活动运行的时间。这就是我正在做的:hours_list = []ind = 0for x in daypart:    if int(x) == 1:        hours_list.append(ind)    else:        hours_list.append('exclude')    ind += 1上面给了我一个这样的列表:[0, 1, 'exclude', 'exclude', 4, 5, 6, 'exclude', 'exclude', 9, 10, 11, 12, 13, 14, 15, 'exclude', 'exclude', 'exclude', 19, 20, 21, 22, 'exclude']现在我想找到一种方法将上述内容变成我想要的输出。我想做的是找到“排除”之间存在哪些元素,然后开始将它们添加到新列表中。然后,我可以从每个列表中取出最小和最大的元素,用“-”将它们连接起来,然后将所有此类列表附加在一起。我有什么想法可以做到这一点,或者有更简单的方法来完成这一切吗?
查看完整描述

3 回答

?
qq_笑_17

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)


查看完整回答
反对 回复 2023-12-09
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

我建议您直接转换为所需的格式,而不是使用与原始输入具有完全相同信息的中间表示形式。让我们想想如何用语言来做到这一点:

  1. 查找1输入字符串中的第一个

  2. 将索引添加到列表中

  3. 查找0字符串中的下一个。

  4. 将比找到的索引少的一个添加到列表中。(或者可以将步骤 2 和 4 中的索引作为一对附加?)

  5. 继续查找下一个1并重复步骤 2-4。

我将其翻译成代码作为读者的练习。


查看完整回答
反对 回复 2023-12-09
?
明月笑刀无情

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,以便将其用作键。


查看完整回答
反对 回复 2023-12-09
  • 3 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信