1、最初代码
#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
@File : 1028.py
@Time : 2020/04/04 19:40:11
@Author : Schiller Xu
@Version : 1.0
@Contact : schillerxu@qq.com
@License : (C)Copyright 2020-2021, SchillerXu
@Desc : None
'''
n=int(input())
data=[input().split() for i in range(n)]
for i in range(len(data)-1,-1,-1):
t=data[i][1].split('/')
s=int(t[0]+t[1]+t[2])
if s<18140906 or s>20140906:
data.pop(i)
else:
data[i].append(s)
data.sort(key=lambda x: x[-1])
lens=len(data)
if lens==0:
print(0)
else:
print("{} {} {}".format(lens,data[0][0],data[-1][0]))
把数据放到列表里面,再删除不合规的数据,占用了大量时间。改进思路有两个:
- 将合规数据放在列表中,然后排序;
- 假定年龄最小出生日期为1814/09/06,年龄最大的出生日期为2014/09/06,然后逐一比较,得到数据。
2、改进后代码
第一种没试过,下面给出第二种代码:
#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
@File : 1028-1.py
@Time : 2020/07/17 10:18:18
@Author : Schiller Xu
@Version : 1.0
@License : (C)Copyright 2020-2021, SchillerXu
@Desc : None
'''
import sys
n=int(input())
max_name=''
min_name=''
max_time='20140906'
min_time='18140906'
i=0
for _ in range(n):
s=sys.stdin.readline()
time=s[-11:-7]+s[-6:-4]+s[-3:-1]
if time<'18140906' or time >'20140906':
continue
else:
i+=1
if time>min_time:
min_time=time
min_name=s[:-12]
if time<max_time:
max_time=time
max_name=s[:-12]
# print(i,max_name,min_name)
if i==0:
print(i)
else:
print(f'{i} {max_name} {min_name}')
因为日期是根据“yyyy/mm/dd”格式给定,所以无论在获取出生日期和姓名的时候,用字符串分割就行,不像1025反转链表,最后一个元素的next是“-1”,而不是5位字符串,如果能统一成5位字符串,统一操作程序运行时间会更快。