栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python训练营】Python每日一练----第30天:日志统计

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python训练营】Python每日一练----第30天:日志统计


Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照
2021年度博客之星TOP100,2021年度博客之星领域TOP5,Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!
最后,愿我们都能在看不到的地方闪闪发光,一起加油进步
“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~
✨✨✨

前言:【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡

Python每日一练:

题目描述解题思路源码分享学习总结往期文章----好文推荐

题目描述

题目描述
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有 N 行。其中每一行的格式是:
ts id
表示在 ts 时刻编号 id 的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是"热帖"。

具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D)这段时间内(注意是左闭右开区间)收到不少于 K 个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。

输入描述
输入格式:
第一行包含三个整数 N,D,K。
以下 N 行每行一条日志,包含两个整数 ts 和 id。

输出描述
按从小到大的顺序输出热帖 idid。每个 idid 一行。

输入输出样例
示例

输入
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3

输出
1
3
运行限制
最大运行时间:1s
最大运行内存: 256M
解题思路

首先输入时我们选用map函数进行多个元素赋值输入,在换行输入ts以及id的时候我们可以选用range函数进行换行,之后再选用map函数进行两个元素的赋值输入;在输入ts以及id之后,我们将其以元素的形式放入事先准备好的列表中去list1.append((id,ts))这里注意我们列表中的元素元组第一个数是我们的id,便于我们的列表排序,按照id的大小排序有利于我们下一步的计算接着设置两个变量ed和社团,第一个代表我们找定的id接下来依次遍历的元素,另一个表示我们一个id遍历结束后进行遍历的另一个id,初始时都定义为0,这里要确保每次循环遍历结束后他两个的值都一样,这样便于我们理解接下来的每一次while循环;因为列表元素是按顺序进行排列的,所以说如果属于同一个id,排列顺序肯定是依次相连的,而他们后一项的时间也是如此,所以我们就可以简单方便的从头开始依次进行遍历;同时如果符合条件ed进行ed += 1在遍历完一个id之后此时我们的ed是有变化的,他的值就是符合时间限制之后的前一个id的最大出现的K的次数。此时令st=ed之后,再进行st的遍历找值这样会方便很多;结束st的取值之后,一定要让st = ed,这样就会和刚开始一样重复之前找值的过程,也便于我们理解。 源码分享

# Time    : 2022/2/25 22:02
# File    : 日志统计.py
# Author  : 是Dream呀!
# VX      : 18300396393
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
a, b, c = map(int,input().split())
list1 = []
for i in range(a):
    ts, id = map(int,input().split())
    list1.append((id,ts))  # 这里注意我们列表中的元素元组第一个数是我们的id,便于我们的列表排序,按照id的大小排序有利于我们下一步的计算
# print(list1)  # [(0, 1), (0, 10), (10, 10), (10, 1), (9, 1), (100, 3), (100, 3)]
list1.sort()
# print(list1)  # [(1, 0), (1, 9), (1, 10), (3, 100), (3, 100), (10, 0), (10, 10)]
ed, st = 0, 0  # 设置两个变量,第一个代表我们找定的id接下来依次遍历的元素,另一个表示我们一个id遍历结束后进行遍历的另一个id
while st < a:
    # 因为列表元素是按顺序进行排列的,所以说如果属于同一个id,排列顺序肯定是依次相连的,而他们后一项的时间也是如此
    while ed < a and list1[ed][0] == list1[st][0] and list1[ed][1]-list1[st][1] < b:
        # while循环找到相同的id符合规定时间内的个数
        ed += 1
    if ed - st >= c:              
        print(list1[st][0])
        st = ed
        # while循环找出下一个我们要进行遍历的id
        while st < a and list1[st][0] == list1[st-1][0]:
            st += 1
        # 此时ed = st进行下一个id的循环遍历
        ed = st
    else:
        st += 1
        ed = st
学习总结

1.range + map函数进行多行输入我们的值:

for i in range(a):
    ts, id = map(int,input().split())

今天是我在Python训练营的第 30 天,希望每天都能见到最棒的你

往期文章----好文推荐

磊 [Python公开课]零基础玩转Python基础篇----第一节:Python的自我介绍

賂 [Python公开课]零基础玩转Python进阶篇----第一节:Python中的文件操作

雷 快来一场一场刷题狂欢的party吧!----【Python训练营】
 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号